我想按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
答案 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'中使用另一个表,因为如果你之间没有连接,你只需要一个包含这两个表的所有字段的表,并且数据之间没有真正的相关性。
我建议你学习如何构建一个数据库模式,这样可以更好地掌握表格的设计方式,这样你就可以编写一流的查询!