我正在尋找一種方法來選擇最常出現的值,例如,每個線程發佈最多的人;在MySQL中選擇最常出現的值
SELECT MOST_OCCURRING(user_id) FROM thread_posts GROUP BY thread_id
有沒有一種很好的方法來做到這一點?
我正在尋找一種方法來選擇最常出現的值,例如,每個線程發佈最多的人;在MySQL中選擇最常出現的值
SELECT MOST_OCCURRING(user_id) FROM thread_posts GROUP BY thread_id
有沒有一種很好的方法來做到這一點?
如果你想在每個線程的基礎上計數,我認爲你可以使用嵌套查詢;按線程先分組,然後按用戶分組:
SELECT thread_id AS tid,
(SELECT user_id FROM thread_posts
WHERE thread_id = tid
GROUP BY user_id
ORDER BY COUNT(*) DESC
LIMIT 0,1) AS topUser
FROM thread_posts
GROUP BY thread_id
+1,我看到你的觀點 – Unreason 2010-07-15 15:30:48
如果您在「每個組最多的n個」標籤下檢查問題,有很多示例。但在這種情況下,您並未定義您想如何處理關係 - 如果兩個或更多用戶具有相同的計數值,該怎麼辦?
SELECT DISTINCT
tp.thread_id,
tp.user_id
FROM THREAD_POSTS tp
JOIN (SELECT t.thread_id,
t.user_id,
COUNT(t.user_id) AS occurrence,
CASE
WHEN @thread != t.thread_id THEN @rownum := 1
ELSE @rownum := @rownum + 1
END AS rank,
@thread := t.thread_id
FROM THREAD_POSTS t
JOIN (SELECT @rownum := 0, @thread := -1) r
GROUP BY t.thread_id, t.user_id
ORDER BY t.thread_id, occurrence DESC) x ON x.thread_id = tp.thread_id
AND x.user_id = tp.user_id
AND x.rank = 1
這將製表USER_ID的出現每線程
SELECT thread_id, user_id, COUNT(*) as postings
FROM thread_posts
GROUP BY thread_id, user_id
但你只是想選擇頂級用戶爲每個線程
SELECT thread_id, user_id, postings
FROM (
SELECT thread_id, user_id, COUNT(*) as postings
FROM thread_posts
GROUP BY thread_id, user_id
)
HAVING postings = max(postings)
這相當於
SELECT thread_id, user_id, COUNT(*) as postings
FROM thread_posts
GROUP BY thread_id, user_id
HAVING postings = max(postings)
HAVING keywor d通常與聚合操作一起使用,以挑選滿足HAVING子句中條件的聚合輸出行。
HAVING子句與WHERE子句不同,其中HAVING子句過濾查詢的結果輸出。而WHERE子句會過濾查詢的輸入數據。 由於HAVING子句過濾查詢的結果輸出,因此它必須出現在ORDER BY和GROUP BY子句之後。
不工作。運行這個查詢給出一個空的輸出。沒有什麼是從MySQL返回的。 – 2015-07-30 20:27:42
你想要一個列表,每個線程與相關的頂部發布用戶一行? – 2010-07-15 15:26:54
@Michael,那是對的。 – Aistina 2010-07-15 15:43:17