SQL - 一个表中GROUP BY一列的两个表的COUNT()行

时间:2015-09-17 22:32:13

标签: mysql sql sql-server

我有两张桌子。一个表是包含大部分信息的主表。它基本上有两个重要的列:

table2_id
type

第二个表只有其中一个列,而且是id。但是,我必须使用GROUP BY类型,因为这是我需要的。但是问题出现了,因为如果我在一个连接语句中使用GROUP BY id,它就不会给我正确的信息。我需要另一个表来获取第一个表中的匹配和不匹配。

示例表1:

id        type
100       admin
101       user
102       author
103       editor
104       customer

示例表2:

id
100
100
101
101
110
120
100
100

我的结果需要看起来像:

type     total(COUNT()IN TABLE1)  intable2andtable1    difference
admin       200                         100                100
user        120                         100                 20
author      205                         200                  5
editor      80                           70                 10
customer    300                         100                200 

所以,有些我需要JOIN和COUNT()表。我能够从第一张表中获得实际总数。但是,如果我尝试对ID执行任何操作,则会将其添加到GROUP BY子句中,这会弄乱我的结果。

以下是我的尝试:

SELECT type , count(*) as total
FROM table1
GROUP BY type

然后会返回:

type     total(COUNT()IN TABLE1)
admin       200 
user        120
author      205
editor      80
customer    300

然而,我无法得到第二张表并向我展示两者之间的差异。

编辑:这是一个让它更清晰的sqlfiddle。 http://sqlfiddle.com/#!15/08951/2/0

2 个答案:

答案 0 :(得分:2)

不完全清楚表1和表2之间的共同字段是什么,但是,假设它是id,此查询应该是您之后的:<\ n / p>

SELECT type,
  COUNT(t1.version_id) as t1_total,
  COUNT(t2.version_id) as t2_total,
  COUNT(t1.version_id) - COUNT(t2.version_id) as difference
FROM table1 t1
    LEFT JOIN table2 t2 ON t1.id = t2.id
GROUP BY type
ORDER BY type ASC

在此处更新了SQL小提琴:http://sqlfiddle.com/#!15/08951/20

答案 1 :(得分:0)

根据我的理解,您想要计算表2中每种类型的表示次数,对吗?怎么样:

SELECT table1.type, COUNT(table2.id) 
FROM table2 INNER JOIN table1 ON table1.id = table2.id
GROUP BY table2.id`  

它应该显示如下:

admin  4
user   2