这些是我要从中获取计数的表
注册
+----+-------------+--------+
| id | empSignupId | cityId |
+----+-------------+--------+
| 42 | 4 | 1 |
| 47 | 3 | 1 |
| 48 | 11 | 1 |
| 54 | 20 | 1 |
| 55 | 21 | 2 |
| 56 | 22 | 2 |
+----+-------------+--------+
宾客名单
+-----+------------+-------------+
| id | guestName | empSignupId |
+-----+------------+-------------+
| 103 | Mallica SS | 3 |
| 104 | Kavya | 3 |
| 108 | Vinay BR | 11 |
| 109 | Akash MS | 11 |
+-----+------------+-------------+
城市
+----+---------------+
| id | cityName |
+----+---------------+
| 1 | Bengaluru |
| 2 | Chennai |
| 3 | Sydney |
| 4 | New York City |
| 5 | Shanghai |
| 6 | Chicago |
+----+---------------+
我需要获取从特定城市注册的人数,其中包括人、他们的客人,如果客人不在场,它也应该显示人数。
这是我尝试过的
SELECT COUNT(gl.id) + COUNT(rfs.id), ct.cityName, rfs.cityId
FROM register rfs
INNER JOIN cities ct ON ct.id=rfs.cityId
INNER JOIN guest_list gl ON gl.empSignupId = rfs.empSignupId
GROUP BY rfs.cityId;
+-------------------------------+-----------+--------+
| COUNT(gl.id) + COUNT(rfs.id) | cityName | cityId |
+-------------------------------+-----------+--------+
| 8 | Bengaluru | 1 |
+-------------------------------+-----------+--------+
我还需要显示来自其他城市的人数,因为没有来自某些城市的客人,因此不返回该人数。
请帮我解决这个问题,我还是 MySQL 的新手。非常感谢任何帮助。
最佳答案
您首先需要聚合 guest_list
表以获得每个 empSignupId
的记录数:
SELECT empSignupId, COUNT(empSignupId) AS countGuest
FROM guest_list gl
GROUP BY empSignupId
输出:
empSignupId countGuest
----------------------
3 2
11 2
现在您必须对上面的派生表使用 LEFT JOIN
,以便同时获取每个城市的记录数:
SELECT COALESCE(SUM(countGuest), 0) + COUNT(rfs.id), ct.cityName, rfs.cityId
FROM register rfs
INNER JOIN cities ct ON ct.id=rfs.cityId
LEFT JOIN (
SELECT empSignupId, COUNT(empSignupId) AS countGuest
FROM guest_list gl
GROUP BY empSignupId
) gl ON gl.empSignupId = rfs.empSignupId
GROUP BY rfs.cityId;
输出:
COALESCE(SUM(countGuest), 0) + COUNT(rfs.id) cityName cityId
------------------------------------------------------------------
8 Bengaluru 1
2 Chennai 2
使用 LEFT JOIN
而不是 INNER JOIN
保证我们也能得到没有客人的城市。
注意:如果您还想获得没有注册的城市,那么您需要先放置cities
表并使用LEFT JOIN
来注册
。
关于mysql - 如何使用 MySQL 根据第一个表中特定列中的值从 2 个表中获取记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49952842/