正确使用Group By,Count和Having

时间:2014-03-08 18:44:08

标签: sql

我有一个类别和项目列表,我想只返回具有一种类型项目的类别。例如:

东西表:

Cat 1 | Item 1
Cat 1 | Item 1
Cat 1 | Item 2
Cat 1 | Item 2
Cat 1 | Item 3
Cat 1 | Item 3
Cat 1 | Item 3
Cat 2 | Item 1
Cat 2 | Item 1

我想返回

Cat 2  | Item 1

我试过了:

SELECT category, item
FROM stuff
GROUP BY category, item
HAVING Count(Distinct item) = 1

但它不起作用。我回来了:

Cat 1 | Item 1
Cat 1 | Item 2
Cat 1 | Item 3
Cat 2 | Item 1

3 个答案:

答案 0 :(得分:2)

SELECT category, MAX(item)
FROM Table1
GROUP BY category
HAVING Count(Distinct item) = 1

答案 1 :(得分:1)

您应该从item子句中删除GROUP BY并改为运行:

SELECT category, MAX(item)
FROM stuff
GROUP BY category
HAVING COUNT(DISTINCT item) = 1

示例SQLFiddle

否则,从GROUP BY子句返回的每个组自然会有一个不同的项目。

答案 2 :(得分:0)

可能您的数据库不允许您在选择中包含既不是也不是聚合的变量。

利用只有一个项目,您可以尝试:

SELECT category, MIN(item) AS item
FROM stuff
GROUP BY category
HAVING Count(Distinct item) = 1