将真实的价值观组合在一起

时间:2019-04-10 23:43:50

标签: mysql

因此,假设我有一个这样的表,称为动物,这些动物是该值的BIT:

id   dogs  cats  birds lions 
1     0     1     0      0 
2     1     1     0      0 
3     0     1     0      1
4     0     0     0      1 

我想将位值为1的动物分组在一起

所需的输出:

cats
dogs,cats
cats,lions
lions

我曾想过使用GROUP_CONCAT将它们放在一起,但不知道如何只选择真实的。只是一个主意。

1 个答案:

答案 0 :(得分:1)

GROUP_CONCAT()对此没有用,它用于在组中的行之间连接一列,而不是在同一行内的列进行连接。

您可以使用CONCAT_WS()在给定分隔符(在这种情况下为',')中连接同一行中的值。它将只连接非空值,因此您想用列名替换真值,并用NULL替换假值。

SELECT CONCAT_WS(',', 
        IF(dogs, 'dogs', NULL), 
        IF(cats, 'cats', NULL), 
        IF(birds, 'birds', NULL), 
        IF(lions, 'lions', NULL)) AS animals
FROM yourtable

DEMO