我有两个表数据和用户。我需要计算data-> value并且只显示最大的count和user-> name。
我尝试了一些查询,但这是错误的。
SELECT data.value, user.name, data.field, COUNT(*) as count
FROM data
INNER JOIN user
ON data.value = user.id
GROUP BY user.name
HAVING data.field = 'user_id'
ORDER BY count DESC
LIMIT 0,1
数据
id order_id field value
1 1 user_id 1
2 2 user_id 1
3 3 vehicle_id 1
4 4 user_id 1
5 5 vehicle_id 2
6 6 user_id 2
用户
id name
1 foo
2 joo
3 peter
目前的结果是
value name field count
1 foo user_id 4
期待结果
value name field count
1 foo user_id 3
答案 0 :(得分:1)
使用where
代替having
使用where
,您可以过滤数据。但是使用having
会获取所有记录并过滤掉完整的组而不是单个记录
SELECT data.value, user.name, data.field, COUNT(*) as count
FROM data
INNER JOIN user ON data.value = user.id
WHERE data.field = 'user_id'
GROUP BY data.value, user.name, data.field
ORDER BY count DESC
LIMIT 0,1
答案 1 :(得分:0)
你应该添加过滤器ond data.field
SELECT data.value, user.name, data.field, COUNT(*) as count
FROM data
INNER JOIN user
ON data.value = user.id and data.field = 'user_id'
GROUP BY user.name
ORDER BY count DESC
LIMIT 0,1