问题
I'd like to count each distinct group being used in a group by clause. I am using this query right now:
SELECT language, group, count(*) AS frequency
FROM bfs
where firstname <> ''
GROUP BY language, group
Which gives me result like this:
'Language' 'Group' 'Frequency'
'ARABIC' 'LEBANESE' 1080
'ARABIC' 'MUSLIM' 40963
'ARABIC' 'MUSLIM MIDDLE EAST' 349
'ARABIC' 'MUSLIM NORTH AFRICAN' 549
What I would like is: instead of total frequency of each combination of language and group column, I'd like to know how many records of each language and group attributes are there
'Language' 'Group' 'Frequency' 'Language Frequency' 'Group Frequency'
'ARABIC' 'LEBANESE' 1080 42941 1080
Where Language Frequency represents the total number of rows with 'ARABIC' as its value; similarly Group Frequency represents the total number of rows which contains 'LEBANESE' as the group frequency. Any help would be greatly appreciated.
Thanks!
回答1:
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` ;
来源:https://stackoverflow.com/questions/17065325/mysql-counting-multiple-columns-in-group-by-clause