SQL中的组计数

时间:2013-07-22 17:36:30

标签: sql oracle group-by oracle-sqldeveloper

我正在寻找一种显示表格的方法,其中一组多个属性出现多次。

例如,假设我有一个表,Tbl1具有属性A,B,C,D,E 如何进行查询,使其仅显示A,B,C出现多次的行(如同一组中的A,B,C),但D和E可能会有所不同?

我的尝试:

SELECT *
FROM Tbl1
WHERE COUNT(A, B, C) > 1

我收到错误:“此处不允许使用群组功能”

2 个答案:

答案 0 :(得分:1)

原因是,您不能在WHERE - sql子句的一部分中使用此分组。

SELECT colums
FROM tables
WHERE condition

条件是指表格的一行。

你想要的是HAVING

SELECT colums
FROM tables
HAVING condition

在分组后评估HAVING之后的条件,您可以使用COUNTSUM等汇总函数

答案 1 :(得分:0)

使用GROUP BY子句(SQL Server:http://msdn.microsoft.com/en-us/library/ms177673.aspx,MySQL:http://www.tutorialspoint.com/mysql/mysql-group-by-clause.htm)。

在每个组中,您需要获取该组中的行数(使用COUNT(*)),然后使用HAVING子句来过滤该计数。 HAVING就像WHERE的{​​{1}}条款。它会过滤分组结果,并可以引用分组列(在本例中为A,B和C)或任何聚合(在本例中为GROUP BY)。

以下是您的查询的样子。请注意,您只能在COUNT(*)字段列表中包含SELECT中提到的列或GROUP BYCOUNT()等汇总函数中包含的列。 MySQL会让你放弃其他列,但SQL Server会给你一个错误。即使数据库允许,最好遵循此规则。

MAX()

如果你想要完全行,那么你可以使用派生表:

SELECT A,
       B,
       C,
       COUNT(*) AS GroupCount
  FROM Tbl1
 GROUP BY A, B, C
HAVING COUNT(*) > 1