所以假设我有这样一个表,称为动物,动物是值的位:
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
把它们放在一起,但不知道如何只选择真正的。只是一个想法。
GROUP_CONCAT()
对此没有用,它用于在组中的行之间连接列,而不是连接同一行中的列。
您可以使用 CONCAT_WS()
连接同一行中的值,并具有给定的分隔符(在本例中为 ','
(。它只会连接非空值,因此您希望将 true 值替换为列名,将 false 值替换为 NULL
。
SELECT CONCAT_WS(',',
IF(dogs, 'dogs', NULL),
IF(cats, 'cats', NULL),
IF(birds, 'birds', NULL),
IF(lions, 'lions', NULL)) AS animals
FROM yourtable
演示