2016-08-21 22 views
0

我有兩個表數據和用戶。我需要計算數據 - >值並只顯示最大數量和用戶 - >名稱。如何使用mysql從表中獲取特定項目的計數

我嘗試了一些查詢,但它是錯誤的。

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 

DATA

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 
+1

**相關:** http://stackoverflow.com/questions/10363518/select-max-from-count – Script47

+0

@ZainFarooq,我們爲什麼需要4號(?)。 data.value與用戶表相關。 –

回答

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 
+0

非常感謝你 –

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 
1

必須組不僅user.name,也受到data.field和data.value,那麼你會得到期望的結果見(sqlfiddle

SELECT data.value, user.name, data.field, COUNT(*) as count 
FROM data 
INNER JOIN user ON data.value = user.id 
GROUP BY data.value, user.name, data.field 
HAVING data.field = 'user_id' 
ORDER BY count DESC 
LIMIT 0,1 
+0

非常感謝你 –

相關問題