MySQL counting multiple columns in group by clause

僤鯓⒐⒋嵵緔 提交于 2019-12-13 00:28:29

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!