[英]Aggregate function GROUP_CONCAT(expr) in MySQL
我在MySQL数据库中使用聚合函数GROUP_CONCAT(expr)时遇到问题: http : //dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
我有此表与此行:
+------+------+
| NAME | AREA |
+------+------+
| and | DM4 |
| ant | DMS |
| don | DM7 |
| ett | DM4 |
| fab | DM4 |
| fra | DMS |
| gia | DM7 |
| gug | DM2 |
| raf | DM |
| rob | DM2 |
| vin | DM7 |
+------+------+
16 rows in set
我尝试了聚合查询来获取此输出,因为您所在的area
是DM
所以在所有地区都应出现名称raf
:
+------+------------------------------+
| AREA | group_emails |
+------+------------------------------+
| DM4 | and; ant; ett; fab; fra; raf |
| DM6 | and; ant; raf |
| DM7 | and; don; gia; vin; raf |
| DM2 | gug; rob; raf |
| DMS | ant; fra ; raf |
+------+------------------------------+
我已经测试了此解决方案,但输出错误。
这开始使我相信我的整体结构是不正确的。
我想念什么?
我将非常感谢您在解决此问题方面可以给我的任何帮助。
mysql> SELECT
AREA,
GROUP_CONCAT(
DISTINCT NAME
ORDER BY
NAME ASC SEPARATOR '; '
) AS group_emails
FROM
`tbl_NAMES`
GROUP BY
AREA
ORDER BY
NAME ASC;
+------+-------------------------+
| AREA | group_emails |
+------+-------------------------+
| DM4 | and; ant; ett; fab; fra |
| DM | raf |
| DM6 | and; ant |
| DM7 | and; don; gia; vin |
| DM2 | gug; rob |
| DMS | ant; fra |
+------+-------------------------+
6 rows in set
您需要使用LIKE
比较将数据基于直接选择的并集与自身的LIKE
以收集所有“匹配”的名称:
SELECT
AREA,
GROUP_CONCAT(
DISTINCT NAME
ORDER BY NAME
SEPARATOR '; ') AS group_emails
FROM (
SELECT * FROM tbl_NAMES
UNION
SELECT t2.name, t1.AREA
FROM tbl_NAMES t1
LEFT JOIN tbl_NAMES t2
ON t1.AREA like concat(t2.AREA, '%')
) x
GROUP BY AREA
ORDER BY group_emails
我将使用此解决方案,该解决方案利用了JOIN:
SELECT areas.area, GROUP_CONCAT(name ORDER BY name ASC SEPARATOR '; ') AS group_emails
FROM
(SELECT DISTINCT area
FROM tbl_names
WHERE
CHAR_LENGTH(area)>2) areas
INNER JOIN tbl_names
ON areas.area=tbl_names.area OR (CHAR_LENGTH(tbl_names.area)=2 AND areas.area LIKE CONCAT(tbl_names.area, '%'))
GROUP BY areas.area
ORDER BY areas.area
第一个子查询返回长度大于2的所有AREAS,例如DM4,DMS,DM7。 然后,当长度大于2时,将这个子查询加入到您的表上areas.area=tbl_names.area
,或者当区域的长度为2时使用LIKE。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.