MySQL - подсчитать количество мужчин и женщин, сгруппированных по странам - PullRequest
3 голосов
/ 05 августа 2011

У меня есть таблица с 3 столбцами: country, user_id, gender. user_id просто увеличивается, есть ряд разных стран, и пол либо мужской, либо женский. Похоже на это

user_id  country  gender
1        japan    male
2        peru     female
3        japan    female
4        fiji     male
5        peru     female

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

country total male female
peru    2     NUL  2
japan   2     1    1
fiji    1     1    NUL

Я пробовал несколько запросов на разные сети, но не могу вернуть все результаты в одном запросе и не хочу использовать 2 запроса, если это возможно.

это моя последняя попытка - я знаю, что это беспорядок, но я пытался что-нибудь:

SELECT DISTINCT a.country AS country, COUNT(b.gender) AS male, COUNT(c.gender) AS     female, COUNT(a.user_id) AS total
  FROM userattributes as a
  LEFT JOIN userattributes as b ON a.user_id=b.user_id
  LEFT JOIN userattributes as c ON a.user_id=c.user_id
  WHERE b.gender='male' AND c.gender='female'
  GROUP BY country;

Кто-нибудь может сделать вышеупомянутое в одном SELECT?

1020 * ТНХ *

1 Ответ

3 голосов
/ 05 августа 2011

Нет необходимости JOIN таблицы с самим собой. Было бы достаточно использовать выражение CASE с агрегатом SUM.

SELECT  country
        , COUNT(*) AS total
        , SUM(CASE WHEN gender = 'male' THEN 1 ELSE 0 END) AS male
        , SUM(CASE WHEN gender = 'female' THEN 1 ELSE 0 END) AS female
FROM    userattributes
GROUP BY
        country
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...