我正在寻找一种方法来显示一组多个属性多次出现的表格。
例如,假设我有一个表 Tbl1,其属性为 A、B、C、D、E 我如何进行查询以使其仅显示 A、B、C 出现多次的行(如在同一个 A、 B、C 作为一组),但 D 和 E 可能不同,也可能不同?
我的尝试:
SELECT *
FROM Tbl1
WHERE COUNT(A, B, C) > 1
我得到一个错误:“这里不允许使用组功能”
我正在寻找一种方法来显示一组多个属性多次出现的表格。
例如,假设我有一个表 Tbl1,其属性为 A、B、C、D、E 我如何进行查询以使其仅显示 A、B、C 出现多次的行(如在同一个 A、 B、C 作为一组),但 D 和 E 可能不同,也可能不同?
我的尝试:
SELECT *
FROM Tbl1
WHERE COUNT(A, B, C) > 1
我得到一个错误:“这里不允许使用组功能”
这样做的原因是,您不能在WHERE
sql 子句的 -part 中使用此分组。
SELECT colums
FROM tables
WHERE condition
条件是指表的单行。
你想要的是HAVING
SELECT colums
FROM tables
HAVING condition
之后的条件在分组后HAVING
评估,您可以使用聚合函数,如或COUNT
SUM
使用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
子句 for GROUP BY
。它过滤分组的结果,并且可以引用分组的列(在本例中为 A、B 和 C)或任何聚合(在本例中为COUNT(*)
)。
这是您的查询的样子。请注意,您只能在SELECT
字段列表中包含 中提到的GROUP BY
或 包含在聚合函数(例如COUNT()
和)中的列MAX()
。MySQL 将允许您将其他列放入其中,但 SQL Server 会给您一个错误。即使数据库允许,最好遵循此规则。
SELECT A,
B,
C,
COUNT(*) AS GroupCount
FROM Tbl1
GROUP BY A, B, C
HAVING COUNT(*) > 1
如果您想要完整的行,那么您可以使用派生表:
SELECT *
FROM Tbl1
JOIN (
SELECT A,
B,
C,
COUNT(*) AS GroupCount
FROM Tbl1
GROUP BY A, B, C
HAVING COUNT(*) > 1
) AS duplicates
ON duplicates.A = Tbl1.A AND
duplicates.B = Tbl1.B AND
duplicates.C = Tbl1.C