Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL-COUNT()用于按一个表中的一列分组的两个表的行_Mysql_Sql_Sql Server - Fatal编程技术网

Mysql SQL-COUNT()用于按一个表中的一列分组的两个表的行

Mysql SQL-COUNT()用于按一个表中的一列分组的两个表的行,mysql,sql,sql-server,Mysql,Sql,Sql Server,我有两张桌子。一个表是包含大部分信息的主表。它基本上有两个重要的栏目: table2_id type 第二个表只有一个列,这就是id。但是,我必须按类型分组,因为这是我需要的。但问题发生了,因为若我在一个联接语句上按id分组,它并没有给我正确的信息。我需要另一个表从第一个表中获取匹配和不匹配 示例表1: id type 100 admin 101 user 102 author 103 editor 104 custom

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

table2_id
type
第二个表只有一个列,这就是id。但是,我必须按类型分组,因为这是我需要的。但问题发生了,因为若我在一个联接语句上按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 
下面是我需要如何连接和计算()表的一些方法。我能够从第一张表中得到实际总数。然而,如果我尝试使用ID做任何事情,它会使我将它添加到groupby子句中,这会弄乱我的结果

以下是我尝试过的:

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让它更清晰

据我所知,您想计算表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

表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 FIDLE:

您想要的结果应该是
SUM
,而不是
COUNT
?因为计数是2,管理员的总和是200。或者我们需要更多的数据,因为
user
count是120?我想你的表1和表2是不完整的,你的样本数据和你想要的结果之间没有逻辑。试着提供一个答案,这样我们可以更好地理解问题,更快地给你答案,请阅读并致歉。我想我是清楚的。这是一把小提琴。希望这会更有意义:我还需要计算类型在表1中出现的次数。