在ORDER BY子句中无效,因为它不包含在聚合函数或GROUP BY子句

时间:2015-11-07 06:59:53

标签: sql-server

我搜索了这个错误并修改了我的查询,并在聚合函数中按列使用了我的订单。 可能是由于对sql知之甚少,我无法捕捉到这个错误的确切含义。

我的表中有以下列:

  
      
  • [id]
  •   
  • [POST_ID]
  •   
  • [USER_ID]
  •   
  • [photo_id]
  •   
  • [photo_group_id]
  •   
  • [album_id]
  •   

我的疑问:

SELECT TOP 3 MAX(share.id) as share_id, share.user_id 
FROM share  
WHERE share.post_id = 5468   
GROUP BY share.user_id 
ORDER BY share.id desc

我在聚合函数中按列使用已经显示

  

列“share.id”在ORDER BY子句中无效,因为   它不包含在聚合函数或GROUP BY中   子句。

任何帮助将不胜感激。 :)

3 个答案:

答案 0 :(得分:9)

列中没有包含SELECTed ...我会将ORDER BY更改为聚合列:

ORDER BY MAX(share.id) DESC

或select中的列索引:

ORDER BY 1 DESC

答案 1 :(得分:4)

share.id无效,因为您在select语句中使用了别名。

尝试使用share_id代替:

SELECT TOP 3 MAX(share.id) as share_id, share.user_id 
FROM share  
WHERE share.post_id = 5468  
GROUP BY share.user_id
ORDER BY share_id DESC

答案 2 :(得分:0)

  1. ORDER BY发生在SELECT之后。由于MAX(share.id)中只有SELECT,因此ORDER BY只能使用已选择的内容。根本没有选择ORDER BY来使用您的“ share.id”。

  2. 另一个问题是您在同一级别上有MAX(share.id)share.user_id。必须通过GROUP BY和聚合函数更好地定义它们。