2013-06-12 129 views
1

我想计算group by子句中使用的每个不同的组。我使用这个查询现在:MySQL按分组计数多列

SELECT language, group, count(*) AS frequency 
FROM bfs 
where firstname <> '' 
GROUP BY language, group 

这使我产生这样的:

'Language' 'Group'    'Frequency' 
'ARABIC' 'LEBANESE'    1080 
'ARABIC' 'MUSLIM'    40963 
'ARABIC' 'MUSLIM MIDDLE EAST'  349 
'ARABIC' 'MUSLIM NORTH AFRICAN' 549 

我想是:不是语言和组列的每个组合的总频率,我想知道每种语言和组属性的多条记录是如何有

'Language' 'Group' 'Frequency' 'Language Frequency' 'Group Frequency' 
'ARABIC' 'LEBANESE' 1080  42941    1080 

其中语言的频率代表了“阿拉伯语”作为其值的行总数;类似的组频率表示包含'LEBANESE'作为组频率的总行数。 任何帮助将不胜感激。

谢谢!

+0

是性能和简易此查询更重要? –

回答

3
SELECT 
    g.language, g.`group`, g.frequency, 
    gl.language_frequency, gg.group_frequency 
FROM 
     (SELECT language, `group`, COUNT(*) AS frequency 
     FROM bfs 
     WHERE firstname > '' 
     GROUP BY language, `group` 
    ) AS g 
    JOIN 
     (SELECT language, COUNT(*) AS languageFrequency 
     FROM bfs 
     WHERE firstname > '' 
     GROUP BY language 
    ) AS gl 
     ON gl.language = g.language 
    JOIN 
     (SELECT `group`, COUNT(*) AS group_frequency 
     FROM bfs 
     WHERE firstname > '' 
     GROUP BY `group` 
    ) AS gg 
     ON gg.`group`= g.`group` ; 
+0

太棒了!非常感谢。它给了我我正在寻找的东西。谢谢你的帮助。 – Namaloom