[英]MYSQL Count unique rows on Where then Left Join and Sort by that count and then Limit to 3
我有兩個桌子。 一個帶有“文本”,“主題”,“用戶”列,稱為“消息表”,另一個表具有“主題”,“標題”列,稱為“主題表”。
例:
消息表
Text Topic User
Hi Ball Hank
Hello Foot John
Sup Ball Hank
Nuthin' Foot Hank
No Volley Hank
主題表
Topic Title
Ball Basketball
Foot Football
Volley Volleyball
我想顯示用戶最喜歡的三個主題以及標題。
結果:漢克的前3個主題
Topic Count Topic Title
2 Ball Basketball
1 Foot Football
1 Volley Volleyball
我必須對特定用戶在“消息表”中擁有的唯一主題進行計數,然后將其加入“主題表”,以便我可以獲取標題,然后按主題數降序對結果進行排序,這樣我就可以獲取用戶最常用的主題。 然后將結果限制為3行以獲取前3位。
救命。
我假設在您的查詢中,您正在搜索Hank? 如果是這樣,這應該使用COUNT
和GROUP BY
起作用:
SELECT Count(m.Topic), t.topic, t.title
FROM messages m
JOIN topic t on m.topic=t.topic
WHERE m.user = 'Hank'
GROUP BY t.topic
- 編輯 -
SELECT user, cnt, topic, title
FROM (
SELECT
@rowNum:=IF(@prevUser=m.user,@rowNum+1,1) rn,
@prevUser:=m.user,
m.cnt,
t.topic,
t.title,
m.user
FROM (SELECT Count(Topic) cnt, topic, user FROM messages GROUP BY user, topic ORDER BY user, Count(Topic) DESC) m
JOIN topic t on m.topic=t.topic
JOIN (SELECT @rowNum:= 0) t
) t
WHERE RN <= 3
ORDER BY User
這應該為每個用戶返回3條記錄-如果只需要一個用戶,則添加到WHERE子句中。
如果僅Hank需要TOP-3主題,請嘗試
SELECT COUNT(m.Topic) `Count Topic`, m.Topic, MIN(t.Title) Title
FROM messages m LEFT JOIN
topics t ON m.Topic = t.Topic
WHERE User = 'Hank'
GROUP BY m.Topic
ORDER BY `Count Topic` DESC LIMIT 3
輸出:
| COUNT TOPIC | TOPIC | TITLE |
-------------------------------------
| 2 | Ball | Basketball |
| 1 | Foot | Football |
| 1 | Volley | Volleyball |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.