GROUP BY子句或用于聚合函数

时间:2018-05-16 14:35:58

标签: sql postgresql

我想按sender_id进行分组,但是我收到以下错误:

  

列“users.first_name”必须出现在GROUP BY子句中或用于聚合函数

SELECT users.first_name, users.last_name, users.avatar_url, users.age, chatting.content, chatting.sender_id, chatting.received_id, chatting.created_at as created_at_chatting
FROM users, chatting 
WHERE chatting.received_id = users.id 
  AND received_id='4' 
GROUP BY chatting.sender_id

tb_chatting

chatting_id | content | received_id | sender_id 
1           | hallo   | 4           | 5
2           | whoaa   | 4           | 6
3           | wow     | 4           | 5

tb_users

user_id | first_name  | last_name | age | avatar_url 
5       | dicky       | perdian   | 12  | httpxxxxxxx
6       | ferda       | est       | 13  | httpsxxxxxx

预期产出:

avatar_url | first_name | last_name | content 
httpxxxxxxx| dicky      | perdian   | hallo 
httpsxxxxxx| ferda      | est       | whoaa

2 个答案:

答案 0 :(得分:1)

基本上,您需要按照正确的顺序包含在您的组中选择的每一列。

例如:

SELECT users.first_name, 
       users.last_name, 
       users.avatar_url, 
       users.age, 
       chatting.content, 
       chatting.sender_id, 
       chatting.received_id, 
       chatting.created_at as created_at_chatting
FROM users, chatting 
WHERE chatting.received_id = users.id 
  AND received_id='4' 
GROUP BY 
       chatting.sender_id,
       users.first_name, 
       users.last_name, 
       users.avatar_url, 
       users.age, 
       chatting.content, 
       chatting.received_id, 
       chatting.created_at

答案 1 :(得分:1)

问题是你试图使用Group By函数而没有像count或sum这样的聚合函数。在这种情况下,Group By无效。但要显示一个简单的样本,就像

select users.first_name, users.last_name, users.avatar_url, users.age,
count(chatting.content)`--If that field contains messages count is good enough
FROM users
  join chatting c on c.senderid = users.id -- if it exists
WHERE chatting.received_id = users.id AND received_id='4'
GROUP BY users.first_name, users.last_name, users.avatar_url, users.age

另外我建议不要在'from'中使用另一个表,因为如果你之间没有连接,你只需要一个包含这两个表的所有字段的表,并且数据之间没有真正的相关性。

我建议你学习如何构建一个数据库模式,这样可以更好地掌握表格的设计方式,这样你就可以编写一流的查询!