我正在寻找一种显示表格的方法,其中一组多个属性出现多次。
例如,假设我有一个表,Tbl1具有属性A,B,C,D,E 如何进行查询,使其仅显示A,B,C出现多次的行(如同一组中的A,B,C),但D和E可能会有所不同?
我的尝试:
SELECT *
FROM Tbl1
WHERE COUNT(A, B, C) > 1
我收到错误:“此处不允许使用群组功能”
答案 0 :(得分:1)
原因是,您不能在WHERE
- sql子句的一部分中使用此分组。
SELECT colums
FROM tables
WHERE condition
条件是指表格的一行。
你想要的是HAVING
SELECT colums
FROM tables
HAVING condition
在分组后评估HAVING
之后的条件,您可以使用COUNT
或SUM
等汇总函数
答案 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 BY
和COUNT()
等汇总函数中包含的列。 MySQL会让你放弃其他列,但SQL Server会给你一个错误。即使数据库允许,最好遵循此规则。
MAX()
如果你想要完全行,那么你可以使用派生表:
SELECT A,
B,
C,
COUNT(*) AS GroupCount
FROM Tbl1
GROUP BY A, B, C
HAVING COUNT(*) > 1