【问题标题】:SQL using a WHERE statement with an aggregate function使用带有聚合函数的 WHERE 语句的 SQL
【发布时间】:2012-04-24 16:33:26
【问题描述】:

以下代码完全按照我想要的方式运行。现在我需要完成相同的任务,但只显示 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;

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

【问题讨论】:

  • 当你使用group by时,你通常会使用having,而不是where。查找差异。

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


【解决方案1】:

可以使用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;

【讨论】:

    【解决方案2】:

    您需要HAVING 子句,它在GROUP BY 中汇总后按值过滤

    【讨论】:

    • 该死。我不骗你,我刚刚发现有。 T__T
    【解决方案3】:

    您需要像其他海报建议的那样使用 HAVING 子句。 供以后参考,这是一个很好的 SQL 命令参考:http://www.1keydata.com/sql/sql.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 2011-05-26
      相关资源
      最近更新 更多