27,581
社区成员




自己写的sql语句:主要查询三个表中的 ip 及 出现数量
select a.ip,a.numm FROM (select ip,count(*) AS numm FROM tableA GROUP BY ip UNION ALl select ip,count(*) AS numm FROM tableB GROUP BY ip UNION ALl select ip,count(*) AS numm FROM tableC GROUP BY ip) as a WHERE a.ip!='' ORDER BY numm DESC LIMIT 0,10;
结果demo:
192.241.211.44 5
192.241.225.20 4
192.241.225.20 2
192.241.211.44 1
但是结果中会出现同一ip,多个count结果,想要根据ip再合并后面数量该怎么做呢?
想要效果:
192.241.211.44 6
192.241.225.20 6
select a.ip,count(a.numm ) FROM (select ip,count() AS numm FROM tableA GROUP BY ip UNION ALl select ip,count() AS numm FROM tableB GROUP BY ip UNION ALl select ip,count(*) AS numm FROM tableC GROUP BY ip) as a WHERE a.ip!='' GROUP BY IP ORDER BY numm DESC LIMIT 0,10;
您这是并了3张表的统计结果,但外面的结果没有统计,因里面用的是union all,没有去重,所以外面还得统计,可两种方式,里面用union去重,或者在外面再统计一次就行了。
一、区别1:取结果的并集
1、union: 对两个结果集进行并集操作, 不包括重复行,相当于distinct, 同时进行默认规则的排序;
2、union all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不管是不是重复;
二、区别2:获取结果后的操作
1、union: 会对获取的结果进行排序操作
2、union all: 不会对获取的结果进行排序操作