mysql - сложный запрос, объединяющий сводную таблицу, число, группу, объединение, частоту, объединение и порядок - PullRequest
0 голосов
/ 28 августа 2018

У меня есть следующая таблица, где a1 - возраст, который можно повторить. g1 - это пол, где 0 обозначает мужчину, а 1 обозначает женщину.

| a1 | g1|    
.................    
|   40 |   0 |    
|   48 |   1 |      
|   47 |   0 | 
|   52 |   0 |       
|   64 |   1 |      
|   50 |   1 |     
|   63 |   1 |     
|   57 |   0 |  

Я хочу показать количество мужчин и женщин в соответствии с возрастом с суммой мужчин и женщин в ряду. Я не смог получить желаемый результат.

| a1 |male|female|total|    
-----------------------------
| 40 | 120 | 80 | 200 |     
| 48 | 130 | 90 | 220 |     
| 47 | 140 | 70 | 210 |      
| 52 | 150 | 40 | 190 |     
| 64 | 160 | 45 | 205 |     
| 50 | 170 | 30 | 200 |     
| 63 | 180 | 30 | 210 |     
| 57 | 190 | 50 | 240 | 

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Для выборочной агрегации можно использовать регистр и сумму () в зависимости от группы по возрасту.

    SELECT  a1 age 
        , SUM(CASE WHEN g1=0 THEN 1 END)  male
        , sum(CASE WHEN g1=1 THEN 1 END)  female
        , SUM(CASE WHEN g1=0 THEN 1 END)  +sum(CASE when g1=1 THEN 1 END)  total
    FROM my_table
    GROUP BY a1
0 голосов
/ 28 августа 2018

Используйте СЛУЧАЙ КОГДА:

select a1 as age, sum(case when g1=0 then 1 end) as male, sum(case when g1=1 then 1 end) as female, sum(case when g1 in (1,0) then 1 end) as total
group by a1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...