mysql - 比较不同表的聚合函数

标签 mysql sql database join

我有如下两个表,它们有重复的记录。我需要获取两个表中都存在的记录,表 2 中有重复行且重复次数更多

Table 1

A     B      C     D     E
192   168    101   100   32
192   168    101   100   32
192   168    101    102  30
192   168    101   102   30

表2

A     B      C     D     E
192   168    101   100   32
192   168    101   100   32
192   168    101   100   32
192   168    101   102   30

例如,我需要获取记录 192 168 101 100 32,因为它在表 2 中的出现次数多于表 1。我知道如何从单个表中获取计数,但如何将每个元组的计数与两个表进行比较

select A,B,C,D, count(*) from table1 inner join table 2 on table1.A=table2.A and table1.B=table2.B and table1.c=table2.c and table1.d=table2.d group by A,B,C,D having count(table2.A,table2.B,table2.C,table2.D)>count(table1.A,table1.B,table1.c,table.D)

上面的查询在语法上不正确,但我正在考虑做类似的事情

最佳答案

试试这个查询:

SELECT t1.A, t1.B, t1.C, t1.D, t1.E
 FROM (
   SELECT A,B,C,D,E, count(*) AS cnt
   FROM table1
   GROUP BY A,B,C,D,E
  ) t1
 INNER JOIN (
   SELECT A,B,C,D,E, count(*) AS cnt
   FROM table2
   GROUP BY A,B,C,D,E
  ) t2 ON t1.A = t2.A AND t1.B = t2.B AND t1.C = t2.C AND t1.D = t2.D AND t1.E = t2.E
 WHERE t1.cnt < t2.cnt

在这里测试:http://sqlfiddle.com/#!2/994119/1

关于mysql - 比较不同表的聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26024899/

相关文章:

mysql - 错误日志-数据库架构?

sql - Varchar(max) 列不允许作为 SQL Server 中的主键

mysql - 如何一次打印多个查询,生成 1 个表?

database - 暴露 key 时屏蔽数据库大小? (不影响性能)

c# - .NET - DataGridView - 当用户添加一行时更新到数据库

sql - 如何在Linux/Grails/Groovy环境中的Grails h2数据源中 “look at data”?

mysql - 如何在子查询中左连接计数

mysql - SQL 中的日期范围

mysql - NodeJS中显示的日期与MySQL中显示的日期不一样,如何解决?

sql - 有没有一种通用的方法可以在 SQL 中生成任意线性序列?