【问题标题】:SQL Query Trouble: "Invalid use of group function"SQL查询故障:“组函数的使用无效”
【发布时间】:2013-02-09 19:41:30
【问题描述】:

注意:我知道查询不完整,我正在尝试一次将其拼凑起来。此时我遇到了错误

基本上,我得到了 MySQL 错误

组函数的使用无效

我不知道为什么。

这是我正在查询的数据库的示意图:

问题说:

“显示出版商名称和出版书籍数量为那些出版过两本书的出版商。记录应该按出版书籍数量降序排列,然后是出版商名称升序排列。你的输出应该匹配下面给出的显示(包括列标题)。”

输出应该是这样的:

这是我正在尝试的查询:

select publisher.name as "Publisher Name", count(book.isbn)
from publisher as "Book Count"
join book using (publisherID)
where count(book.isbn) > 2
group by publisher.name;

【问题讨论】:

  • 我想你想使用HAVING count(book.isbn) > 2。此外,丢失您桌子上的别名。离开FROM publisher

标签: mysql join group-by


【解决方案1】:

试试

SELECT MIN(p.name) AS `Publisher Name`, COUNT(b.isbn) AS `Book Count`
  FROM publisher AS p INNER JOIN 
       book      AS b ON p.PublisherID = b.PublisherID
GROUP BY p.publisherID
HAVING COUNT(b.isbn) > 2

这里是sqlfiddle

【讨论】:

    【解决方案2】:

    2 个问题:

    1. 您已将别名添加到表中,而不是列中。

    2. 您不能在 WHERE 条件中使用 COUNT。您需要使用HAVING

    尝试以下方法:

    SELECT
        publisher.name as `Publisher Name`,
        COUNT(book.isbn) as `Book Count`
    FROM
        publisher 
    JOIN
        book USING (publisherID)
    GROUP BY
        publisher.name
    HAVING
        `Book Count` > 2
    

    【讨论】:

    • 抱歉,意思是说你不能使用COUNT。至于引号作为别名,您是对的。我不知道为什么我不这么认为。
    【解决方案3】:

    问题出在您的from 语句中。正确的语法是:

    select publisher.name as "Publisher Name", count(book.isbn)  as "Book Count"
    from publisher join book
         using (publisherID)
    group by publisher.name;
    

      有 count(book.isbn) > 2

    您为publisher 表指定了别名Book Count,而不是计数。

    【讨论】:

      【解决方案4】:

      您不能在 where 中使用 COUNT,而只能在 SELECT 中使用。 尝试对组使用 HAVING 条件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-24
        • 2014-02-18
        • 1970-01-01
        • 2016-04-21
        • 2021-04-13
        • 1970-01-01
        • 2011-03-02
        • 1970-01-01
        相关资源
        最近更新 更多