如何让groupwise为每个表计数并按列打印它们?

ohfgkhjo  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(218)

这个问题在这里已经有答案了

如何在mysql中进行完整的外部连接(15个答案)
两年前关门了。
这里有两个表,每个表都有监督字段和用户id字段。我希望groupwise计数表和打印的每个监督如下。两个表都包含不同的数据。
计数也应仅用于指定的用户id。
表1列

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

表2列

+----+-------------+---------+
| 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 |
| ....  |        |        |
+-------+--------+--------+

现在,我尝试了这个查询,它为表1提供了正确的结果,而不是表2。

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
xpcnnkqh

xpcnnkqh1#

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

这假设users表存在。您遇到的问题是type3在t1中不存在,因此左连接不会包含来自那里的值,并且您是在id而不是user\ id上连接的。

相关问题