因未包含在聚合函数或GROUP BY子句中,所以无效。

8
我希望创建一个查询,从产品表中获取产品、从类型表中获取其类型和类别,并计算产品上的歌曲数量。但不知何故,这个查询出现了错误。当我添加 count(n.name) 后,它开始出现问题。
SELECT p.name, p.publisher, p.description, p.price, p.picture
     , p.releasedate, t.type, t.category, count(n.name) AS songs
  FROM Products p
 INNER JOIN ProductType t ON (p.type_id = t.id)
 INNER JOIN Songs n ON (p.id = n.product_id)

我收到的错误信息是:
“在选择列表中,列 'Products.name' 无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。”
2个回答

6

仅对 Songs 行进行分组,然后联接聚合数据而不是直接使用 Songs 表:

SELECT p.name, p.publisher, p.description, p.price, p.picture
     , p.releasedate, t.type, t.category, <b>n.songs</b>
  FROM Products p
 INNER JOIN ProductType t ON (p.type_id = t.id)
 INNER JOIN <b>(
   SELECT
     product_id,
     COUNT(n.name) AS songs
   FROM Songs
   GROUP BY product_id
 )</b> n ON (p.id = n.product_id)

那样做可以避免将几乎所有的输出列添加到GROUP BY子句中,这是你在问题中发布的查询所必须做的。

0
SELECT p.name, p.publisher, p.description, p.price, p.picture, p.releasedate, t.type, t.category, count(1) AS songs
                    FROM Products p
                    INNER JOIN ProductType t ON (p.type_id = t.id)
                    INNER JOIN Songs n ON (p.id = n.product_id)
GROUP BY p.name, p.publisher, p.description, p.price, p.picture, p.releasedate, t.type, t.category

2
也许需要解释一下他为什么需要使用GROUP BY? - Mario S
现在我得到了“Te text,ntext和image数据类型不能进行比较或排序,除非使用IS NULL或LIKE运算符。” - Jerodev
好的,你需要使用group by,因为在SELECT子句中有一个聚合函数。 - Gordon Linoff
哪些字段是ntxet、文本或图像数据类型? - HLGEM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接