【问题标题】:My 'Select List' is incorrect with the current Group By clause. How do I fix this?我的“选择列表”与当前的 Group By 子句不正确。我该如何解决?
【发布时间】:2026-01-21 18:25:01
【问题描述】:

这是我的查询:

SELECT
    artist.firstname
    ,artist.lastname
    ,AvgRating = AVG(painting.rating) OVER ( PARTITION BY painting.artistid )
    ,MaxRating = MAX(painting.rating) OVER ( PARTITION BY painting.artistid )
    ,MinRating = MIN(painting.rating) OVER ( PARTITION BY painting.artistid )
FROM 
    painting
JOIN 
    artist ON painting.artistid = artist.id
GROUP BY
    artist.firstname
    ,artist.lastname
HAVING COUNT(painting.title) > 2

但我收到此错误:

列“painting.ArtistId”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。行:1

【问题讨论】:

  • 你能展示样本数据和预期结果吗
  • 这是问题提示:显示每个艺术家的名字和姓氏、他们的平均评分(如 AvgRating)以及他们的最低和最高评分(如 MinRating 和 MaxRating)。只包括那些有两幅以上画作的艺术家。

标签: sql sql-server group-by aggregate-functions


【解决方案1】:

这可能会有所帮助

SELECT
     artist.firstname
    ,artist.lastname
    ,AvgRating = AVG(painting.rating)
    ,MaxRating = MAX(painting.rating)
    ,MinRating = MIN(painting.rating)
FROM painting
JOIN artist ON painting.artistid = artist.id
GROUP BY
     artist.firstname
    ,artist.lastname
HAVING COUNT(painting.artistid) > 2

【讨论】:

  • 如果名字和姓氏不是唯一的,则可以将 Artist.id 添加到选择和分组依据。
【解决方案2】:

您只需将 ArtistId 添加到GROUP BY

SELECT
    artist.firstname
    ,artist.lastname
    ,AvgRating = AVG(painting.rating) OVER ( PARTITION BY painting.artistid )
    ,MaxRating = MAX(painting.rating) OVER ( PARTITION BY painting.artistid )
    ,MinRating = MIN(painting.rating) OVER ( PARTITION BY painting.artistid )
FROM painting
JOIN artist ON painting.artistid = artist.id
GROUP BY
    artist.firstname
    ,artist.lastname
    ,painting.artistid
HAVING COUNT(painting.title) > 2

【讨论】:

  • 我这样做并添加了painting.rating。它不会返回任何行。
最近更新 更多