繁体   English   中英

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

[英]SQL - COUNT() rows for two tables that are GROUP BY one column in one table

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

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

不完全清楚表 1 和表 2 之间的公共字段是什么,但是,假设它是id ,则此查询应该是您所追求的:

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 Fiddle: http ://sqlfiddle.com/#!15/08951/20

据我了解,您想计算每种类型在 table2 中表示的次数,对吗? 这个怎么样:

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

它应该显示如下内容:

admin  4
user   2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM