我有一些用户,他们可以在一段时间内进行多次预订。每个预订可以有多人。
查询可能如下所示:
SELECT users.*,
(SELECT COUNT(person) FROM person_to_booking WHERE person_to_booking.booking = bookings.id) AS people_per_booking
FROM users
LEFT JOIN bookings ON users.id = bookings.user
GROUP BY users.id
这将返回一个结果,其中包含最后预订的人数。如果我删除GROUP BY
,那么我会得到 4 行,每行都有该预订的正确人数。
我需要一行,其中 SUM()
为 COUNT(person)
。我怎样才能实现这个目标?
编辑
表格的结构如下:
Users
id | name
---------
1 | Dave
2 | Bob
Bookings
id | user | company
-------------
1 | 1 | Big Group
2 | 1 | Big Group
3 | 2 | Small Company
Person to Bookings
id | person | bookings
----------------------
1 | 1 | 1
1 | 2 | 1
1 | 3 | 1
1 | 4 | 1
1 | 5 | 2
1 | 6 | 2
因此,用户可以针对他们进行预订,然后一个预订可以有很多人。
最佳答案
如果我理解正确的话
SELECT users.*,
SELECT SUM(cper) FROM (SELECT COUNT(person) as cper FROM person_to_booking WHERE person_to_booking.booking = bookings.id) AS people_per_booking
FROM users
LEFT JOIN bookings ON users.id = bookings.user
GROUP BY users.id
关于Mysql - 连接查询的总和计数结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44179822/