COUNT со значениями IF FROM DISTINCT MySQL - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь подсчитать, сколько пользователей составляют женщины и сколько мужчин, после выполнения DISTINCT для идентификатора пользователя

SELECT
COUNT(IF("Gender" = 'female', 1, NULL)) as Ufemale,
COUNT(IF("Gender" = 'male', 1, NULL)) as Umale
FROM (SELECT DISTINCT UserID FROM user_stats where Year='2019' and Account='P') as UID

Если я выполню

SELECT DISTINCT UserID FROM user_stats where Year='2019' and Account='P'

Возвращает уникальный идентификатор пользователя. Однако, если я объединю его с подсчетом половой части, он вернет ноль.

Вот как выглядят значения

UserID            |  Gender
-----------------------------
2018359084885123  |  male
1925823664195671  |  female
2033134076795519  |
2122445674469149  |  female
2315129265210413  |  female
2018359084885123  |  male
2122445674469149  |  female

И цель - показать

Ufemale  |  Umale
-------------------
   3     |    1

Ответы [ 2 ]

2 голосов
/ 27 апреля 2019

Попробуйте:

Таблицы

drop table if exists test;

create table test (userid bigint, gender char(6));

insert into test values
(2018359084885123,'male')
,(1925823664195671,'female')
,(2033134076795519, null)
,(2122445674469149,'female')
,(2315129265210413,'female')
,(2018359084885123,'male')
,(2122445674469149,'female');

Запрос

select
    sum(case when gender = 'female' then 1 else 0 end) as ufemale,
    sum(case when gender = 'male' then 1 else 0 end) as umale
from
(select distinct userid, gender from test) x

Результат

ufemale umale
3       1

Пример: https://rextester.com/JLQ19855

1 голос
/ 27 апреля 2019

В результатах подзапроса нет столбца Gender:

SELECT DISTINCT UserID FROM user_stats where Year='2019' and Account='P'

, как вы можете подумать.То, что вы делаете, сравнивает 2 строки: "Gender" и 'female', которые явно не равны, так что это:

IF("Gender" = 'female', 1, NULL)

возвращает NULL и COUNT(NULL) возвращает 0.Где находится столбец Gender?Это в user_stats таблице или в другой таблице, как Users?Если он находится в user_stats, то вам нужно написать запрос следующим образом:

select
  sum(t.gender = 'female') ufemale,
  sum(t.gender = 'male') umale
from (
  select distinct userid, gender 
  from user_stats 
  where Year='2019' and Account='P'
) t

Если он находится в таблице users, то сначала вам понадобится объединение:

select
  sum(u.gender = 'female') ufemale,
  sum(u.gender = 'male') umale
from (
  select distinct userid, gender 
  from user_stats 
  where Year='2019' and Account='P'
) t inner join users u
on u.userid = t.userid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...