关于mysql多表合并查询问题(求sql大佬)

cdn008 2023-03-15 15:53:33

自己写的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

...全文
357 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
aixingjieluo 2023-04-21
  • 打赏
  • 举报
回复

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: 不会对获取的结果进行排序操作

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧