2013-05-11 87 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