2013-05-11 81 views
3

我旁邊有2個表:獲取MAX()爲每行COUNT()MYSQL

表querys並表時間:

id | text  id | mid | country 
1 hello  1 1  UK 
2  hi  2 1  PL 
3  sd  3 2  USA 

ID =中旬,國家是不同的(英國,美國等上)。

我需要做下一個列表:

UK - text 30 rows (this text has most mid in table 2 for UK) 
USA - text 25 rows 
PL - text 10 rows 
... 
SS - text 1 rows. 

現在我擁有的下一個想法: 獲取其MID每個國家都有最大行數和MID = id來獲取文字和排序。

SELECT time.country,querys.text,COUNT(mid) AS cnt 
    FROM time INNER JOIN `querys` ON(time.mid = querys.id) 
     GROUP BY mid 
     ORDER BY country,cnt 
     DESC 

但有了這段代碼,我收到所有的文本與計數。 如

UK text1 30, 
UK text2 25, 
PL text2 10, 
PL text3 5 .. 

但我只需要一個最大值爲每一個國家,任何人都可以幫助如何查詢切成每個國家最多1個文本?

+0

我想知道你爲什麼得到這樣的結果嗎?你能提供符合你想要的結果的樣本記錄嗎?給出這樣的例子會讓問題變得混亂。 perhps你可以建立它在http://www.sqlfiddle.com – 2013-05-11 15:02:13

+0

http://www.sqlfiddle.com/#!2/a6182/1/0,現在我看到它不能正常工作,但主要問題在於:| – KorbenDallas 2013-05-11 15:15:17

+0

根據小提琴的記錄,你想要的輸出是什麼呢? – 2013-05-11 15:16:51

回答

2
SELECT a.country, 
     b.text, 
     COUNT(*) AS cnt 
FROM time a 
     INNER JOIN querys b 
      ON a.mid = b.id 
     INNER JOIN 
     (
      SELECT Country, 
        MAX(totalCount) max_count 
      FROM 
        (
         SELECT Country, Mid, 
         COUNT(*) totalCount 
         FROM time 
         GROUP BY Country, Mid 
        ) s 
      GROUP BY Country 
     ) c ON a.country = c.country 
GROUP BY a.country, b.text, c.max_count 
HAVING COUNT(*) = c.max_count 
ORDER BY cnt DESC 

輸出

╔═════════╦══════╦═════╗ 
║ COUNTRY ║ TEXT ║ CNT ║ 
╠═════════╬══════╬═════╣ 
║ UA  ║ sdf ║ 10 ║ 
║ USA  ║ qw ║ 2 ║ 
╚═════════╩══════╩═════╝ 
+1

yeeeess!非常感謝你,這正是我需要的!現在我看到我從多遠回答.. – KorbenDallas 2013-05-11 15:39:18

+0

本週我有點頭暈。所以現在這是我可以給予':)'最少的答案''無論如何,不​​客氣! – 2013-05-11 15:41:35