MYSQL: Как добавить значение Null, используя GROUP_CONCAT, и разделитель, используя groupby? - PullRequest
0 голосов
/ 25 апреля 2018

Как отобразить Null с помощью Group Concat и Separator

select sr.aID,
 GROUP_CONCAT(p.GENDER SEPARATOR ',') as Gender,
 GROUP_CONCAT(sr.FANS SEPARATOR ',') as FA,
from RELATION sr, Person p where RELATION _TYPE = 'FATHER'
and  sr.bID= p.ID group by sr.subjektA_ID;

Возвращает следующее значение для FA

1 | MALE, FEMALE | YES, NO
2 | FEMALE, MALE | NO, YES
3 | FEMALE, MALE | YES
4 | FEMALE, MALE | NO

Я хочу, чтобы оно отображало нулевое значение, т.е.

3 | FEMALE, MALE | YES, NULL
4 | FEMALE, MALE | NULL, NO

Как добиться того же, используя GROUP Concat и Separator вместе

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018
select sr.aID,
 GROUP_CONCAT( IFNULL(p.GENDER, 'NULL') ) as Gender,
 GROUP_CONCAT( IFNULL(sr.FANS, 'NULL') ) as FA,
from RELATION sr, Person p where RELATION _TYPE = 'FATHER'
and  sr.bID= p.ID group by sr.subjektA_ID;

Аннотация: GROUP_CONCAT по умолчанию разделяет поля на «,», поэтому, если хотите, вы можете опустить его, IFNULL (столбец, «default_text»), при этом все нулевые значения заменяются теми, которые вы выбрали по умолчанию.

0 голосов
/ 25 апреля 2018

Попробуйте заменить эти NULL значения строковым литералом 'NULL':

SELECT
    sr.aID,
    GROUP_CONCAT(p.GENDER) AS Gender,
    GROUP_CONCAT(COALESCE(sr.FANS, 'NULL')) AS FA
FROM RELATION sr
INNER JOIN Person p
    ON sr.bID = p.ID
WHERE
    RELATION _TYPE = 'FATHER'
GROUP BY
    sr.aID;

GROUP_CONCAT, как и большинство агрегатных функций, игнорируйте значения NULL.Но для целей презентации вам нужно видеть только строку 'NULL', поэтому приведенное выше предложение должно работать.

Примечание. Я также заменил ваши соединения старого стиля на явные объединения.Кроме того, вы должны выбрать тот же столбец, который вы использовали для агрегирования.

...