MySQL比较优雅的查询

MySQL比较优雅的查询

Scroll Down

#MySQL查询笔记记录

今天遇到了个问题,从MySQL数据库查询数据,某个字段有重复值,要将它的重复值对应的列表合并到一起,其它为重复的字段,分别显示出来;

简而言之 就是 将查询结果分别 输出 为 单独显示 和 将多个数组合并显示,并在一条查询语句当中。

我最开始很基本的查询是这样的:

SELECT * FROM fba_head_tail_difference WHERE taskId = 990 AND isValid = 1;

image.png

可以发现,level为0的数据分为多条显示,但我在另外一个查询里面需要它对应的volumeIds合并到一起显示,遇山修路,遇水架桥

我思考的是如何将MySQL查询结果分别输出单个和多个数组,并将多个数组合并到一起显示

一翻查阅MySQL文档,谷歌后,问题解决,get了几个MySQL的新姿势,MySQL作为关系型数据库存在了这么多年真的有其存在的意义,真的很强大!!!

省了很多事,查询速度也不慢,不然我还要代码里将它遍历再组到一起,很费时费力

解决方案

SELECT DISTINCT LEVEL,GROUP_CONCAT(volumeIds SEPARATOR ','),COUNT(LEVEL) AS COUNT FROM fba_head_tail_difference 
WHERE taskId = 990 AND isValid = 1 AND LEVEL >= 0  GROUP BY LEVEL HAVING COUNT>0

image.png

GROUP_CONCAT(volumeIds SEPARATOR ',')

这个语法 含义是将多个数组用,连接组合成一个数组

GROUP BY LEVEL HAVING COUNT>0

将level 排序,并筛选出level等级出现次数大于0的,即得到查询数据。