Как рассчитать на основе происхождения данных в Mysql - PullRequest
0 голосов
/ 01 января 2019

Рассмотрим эти данные:

userid   a.birthday   b.birthday   c.birthday
12        2017-01-01    2017-01-01   NULL
13        2016-01-12    2016-01-12   2016-01-12
14          NULL        2017-04-05   NULL

У меня есть следующий запрос:

select COALESCE(a.birthday,b.birthday,c.birthday) as birthday
from ....

Это дает мне дату рождения, основываясь на источнике, сначала я беру его из a, еслисуществует еще от b еще от c .... Результат запроса:

birthday
-------
2017-01-01   #from a.birthday
2016-01-12   #from a.birthday
2017-04-05   #from b.birthday
count(3) 

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

Итак, что я на самом деле хочу увидеть:

    a b c
   -------
    2 1 0

Обратите внимание, что это невозможно сделать простым подсчетом таблиц.

Хотя у userid=12 день рождения указан как a, так и b в моем запросе, я беру его из значения, поэтому при подсчете я хочу считать его как a, а не как b.

Как я могу сделать такой подсчет записей в MySQL?

Ответы [ 2 ]

0 голосов
/ 01 января 2019
select
    -- a is not null 
    count(a.birthdate) as a
    -- a is null
    ,count(case when a.birthdate is null then b.birthdate end) as b
    -- a and b are both null
    ,count(case when coalesce(a.birthdate,b.birthdate) is null then c.birthdate end) as c
from tab
0 голосов
/ 01 января 2019

Просто добавьте простое выражение регистра:

SELECT CASE WHEN a.birthday IS NOT NULL THEN 'a'
            WHEN b.birthday IS NOT NULL THEN 'b'
            WHEN c.birthday IS NOT NULL THEN 'c' END AS src

Это даст вам предпочтительный источник.Вы можете сгруппировать это выражение при подсчете (оно даст вам три строки вместо трех столбцов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...