如何对每个表进行分组计数并按列打印? [复制]

Posted

技术标签:

【中文标题】如何对每个表进行分组计数并按列打印? [复制]【英文标题】:How can I make groupwise count for each table and print them columnwise? [duplicate] 【发布时间】:2019-04-16 12:35:02 【问题描述】:

这里我有两个表,每个表都有监督字段和 user_id 字段。我希望对表格和打印的每个监督进行分组计数,如下所示。两个表都包含不同的数据。

count 也应该只针对指定的 user_id。

Table1 列

+----+-------------+---------+
| id | supervision | user_id |
+----+-------------+---------+
|  1 | type1       |       2 |
|  2 | type1       |       2 |
|  3 | type2       |      1  |
|  4 | type1       |       2 |
|  5 | type2       |       2 |
+----+-------------+---------+

Table2 列

+----+-------------+---------+
| id | supervision | user_id |
+----+-------------+---------+
|  1 | type3       |       2 |
|  2 | type1       |       2 |
|  3 | type3       |       1 |
|  4 | type1       |       2 |
|  5 | type2       |       2 |
+----+-------------+---------+

对于user_id=2,它应该给出如下输出:

+-------+--------+--------+
| Type  | table1 | table2 |
+-------+--------+--------+
| type1 |      3 |      2 |
| type2 |      1 |      1 |
| type3 |      0 |      1 |
| ....  |        |        |
+-------+--------+--------+

现在这个查询我试过了,它给出了 table1 的正确结果而不是 table2。

select t1.supervision,
       count(t1.supervision) AS table1,
       count(t2.supervision) AS table2 from table1 t1 
LEFT JOIN 
table2 t2 ON t1.id=t2.id 
where t1.userid=2 AND t2.userid=2  
group by t1.supervision

【问题讨论】:

mysql 还是 SQL Server?请不要标记多个数据库引擎。 是否有可能有一些 type* 值,它们只存在于表 1 中,而不存在于表 2 中,反之亦然? 【参考方案1】:
SELECT t1.supervision, count(t1.id) AS table1, count(t2.id) AS table2
FROM users u
LEFT JOIN table1 t1 on (t1.user_id = u.id)
LEFT JOIN table2 t2 on (t2.user_id = u.id)
WHERE u.id = 2
GROUP BY t1.supervision

这假设用户表存在。您遇到的问题是 type3 没有在 t1 中退出,因此左连接不会包含来自那里的值,并且您加入的是 id 而不是 user_id。

【讨论】:

以上是关于如何对每个表进行分组计数并按列打印? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何按列值的计数进行分组并对其进行排序?

Mysql按条件更新同一表列并按列分组

比较两个 MYSQL 表并按列返回缺失的日期和分组

Mongodb:按元素分组并根据条件显示子文档计数并按日期对文档进行排序

每天按列和行、计数和百分比分组

对超过百万行进行排序的分组