使用带有聚合函数的 WHERE 语句的 SQL

标签 sql count group-by aggregate-functions where-clause

以下代码完全按照我想要的方式运行。现在我需要完成相同的任务,但只显示 COUNT 大于 1 的结果。COUNT 旨在计算每个不同图书 ID(出价)的分配表中的行数。

Prompt Task 1E7;
SELECT B.bid,title,COUNT(*)
FROM ALLOCATION A
INNER JOIN BOOK B
ON A.bid = B.bid
GROUP BY B.bid,title
ORDER BY COUNT(*),bid;

我尝试简单地将 WHERE COUNT(*) > 1 放在几个不同的位置。这只会返回 WHERE 行的错误“SQL 命令未正确结束”。我还尝试了以下方法。

Prompt Task 1E7;
SELECT B.bid,title,COUNT(*)
FROM ALLOCATION A
INNER JOIN BOOK B
ON A.bid = B.bid
GROUP BY B.bid,title
WHERE (SELECT COUNT(*)
FROM ALLOCATION A
INNER JOIN BOOK B
ON A.bid = B.bid
GROUP BY B.bid,title) > 1
ORDER BY COUNT(*),bid;

以及任何其他数量的小调整。

最佳答案

可以使用HAVING过滤聚合:

SELECT  B.bid, title, COUNT(*) cnt
FROM    ALLOCATION A
INNER JOIN
        BOOK B
ON      A.bid = B.bid
GROUP BY
        B.bid, title
HAVING  COUNT(*) > 1
ORDER BY
        cnt, bid;

关于使用带有聚合函数的 WHERE 语句的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10302116/

相关文章:

mysql - 第 1064 章

mysql - 获取每行两列之间的最小值

c# - DataTable linq查询按列分组

sql - 无法在 GROUP BY 中使用列别名

sql - 过滤具有相同 ID 的前一行具有特定值的数据

mysql - 获取组内的计数和百分比

c# - SELECT 和 UPDATE 表,因此没有线程重叠

R 基于条件的跨列计数

SQL 计数正则表达式匹配 (PostgreSQL)

mysql - 根据列值的增量选择多行