#应用场景:需要获取数据库里两张表X,Y一些相同字段a,b的数量排序后取前五个
比如
一个表叫做A车设备X,一个表叫做B车设备Y ,现在的需求是需要展示车设备里面排名前五的设备姓名name以及数量count
sql如下 :
我使用union all 是因为我是需要统计数量,所以相同的列也要展示,union 和union all 的区别就是union会去重
WHERE del_flag = 0是没有被删除的设备
首先按照name分组,计算每个分组里面的设备类型数量,
需要注意的是使用union 时必须要为新表设置名字,见倒数第三行的 AS A
第一行的count前面不要加A.count
因为A表里没有这个数据 她是字表count(b)的别称
SELECT A.name,count
FROM
(
(SELECT name, count(b) AS count
from X
WHERE del_flag = 0
GROUP BY name)
union all
(
SELECT name, count(b) AS count
from Y
WHERE del_flag = 0
GROUP BY name)
) AS A
ORDER BY count desc
LIMIT 5;