我有以下查询:
SELECT name, GROUP_CONCAT(job SEPARATOR ','),
count(*) FROM users GROUP BY name ORDER BY name ASC
是否可以只连接不包含''的作业字段,如果是,如何?我不能做一个WHERE子句,因为我仍然需要那些没有“工作”的人。
图片如下表:
+-------+----------+
| name | job |
+-------+----------+
| Bob | doctor |
| Bob | teacher |
| Frank | dentist |
| Tom | |
| Tom | |
| Tom | |
| Tom | |
| Tom | salesman |
+-------+----------+
当前查询将导致:
+--------+---------------------------------+----------+
| name | GROUP_CONCAT(job SEPARATOR ',') | count(*) |
+--------+---------------------------------+----------+
| Bob | doctor, teacher | 2 |
| Frank | dentist | 1 |
| Tom | ,,,,salesman | 5 |
+--------+---------------------------------+----------+
但我希望它是:
+--------+---------------------------------+----------+
| name | GROUP_CONCAT(job SEPARATOR ',') | count(*) |
+--------+---------------------------------+----------+
| Bob | doctor,teacher | 2 |
| Frank | dentist | 1 |
| Tom | salesman | 5 |
+--------+---------------------------------+----------+
(不要介意这个表的逻辑。这只是一个简单的例子来说明事项)
原因是,我要在php中爆炸()GROUP_CONCAT(作业SEPARATOR','),在实际的表中,很容易就会有1000个无用的,这会使爆炸功能失效非常慢。 谢谢,
lordstyx。
答案 0 :(得分:2)
我找到了一个解决方案:而不是让工作'',我只是将字段设为Null,而查询会忽略它。
答案 1 :(得分:1)
您还可以使用IF()
:
SELECT name, GROUP_CONCAT( if(job = '', null, job) SEPARATOR ','),
count(*) FROM users GROUP BY name ORDER BY name ASC
答案 2 :(得分:0)
SELECT name, GROUP_CONCAT(job SEPARATOR ',') FROM USERS
WHERE job IS NULL OR job NOT LIKE '%,%'
GROUP BY name ORDER BY name ASC
但是,您可能最好建议将逗号替换为其他字符串,然后包含所有作业:
SELECT name, GROUP_CONCAT(REPLACE(job, ',', ';')) FROM USERS
GROUP BY name ORDER BY name ASC