【问题标题】:Invalid because it is not contained in an aggregate function or the group by clause无效,因为它不包含在聚合函数或 group by 子句中
【发布时间】:2012-05-02 17:50:30
【问题描述】:

我想创建一个查询,从产品表中获取产品、类型表中的类型和类别以及产品上的歌曲数。 但不知何故,这个查询会引发错误。它始于我添加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 子句中。

【问题讨论】:

    标签: sql


    【解决方案1】:

    仅对 Songs 行进行分组,然后加入聚合数据而不是正确的 Songs 表:

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

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

    【讨论】:

      【解决方案2】:
      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
      

      【讨论】:

      • 也许对他需要 GROUP BY 的为什么的解释会到位?
      • 现在我得到'Te text、ntext 和 image 数据类型无法比较或排序,除非使用 IS NULL 或 LIKE 运算符。'
      • 好的,你需要一个 group by 因为你在 SELECT 子句中有一个聚合函数。
      • 哪些字段是 ntxet、文本或图像数据类型?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      • 2011-07-04
      • 2013-08-17
      相关资源
      最近更新 更多