[英]MySQL count with multiple joins and group by
我似乎无法弄清楚构造这个查询的正确方法,我知道有一种方法可以用纯SQL来完成它,我宁愿通过适当的查询来完成它而不是在我的应用程序逻辑中。
我有三张桌子:
event_types,booking_types和预订
我想要的是获得给定事件的预订数量,但也包括预订零的事件类型的行。
SELECT et.name AS test_type, COUNT(et.name) AS num_seats FROM event_types AS et
LEFT OUTER JOIN booking_types AS bt ON et.type_id = bt.event_type_id
LEFT OUTER JOIN bookings AS b ON b.booking_id = bt.booking_id
WHERE b.event_id = 5
GROUP BY test_type
此查询返回类似的内容
test_type | num_seats
----------------------
Transcript | 4
----------------------
Written | 1
----------------------
目前有三种event_types:'Transcript','Written'和'Skill'
由于还没有任何“技能”预订(预订可以有多种类型),我希望结果包括像'技能'这样的行。 0.此外,如果没有预订,它应该有3个零行,在这种情况下每个event_type一个。
感谢您提供任何帮助!
尝试将WHERE
过滤器移动到JOIN
:
SELECT et.name AS test_type,
COUNT(b.booking_id) AS num_seats
FROM event_types AS et
LEFT OUTER JOIN booking_types AS bt
ON et.type_id = bt.event_type_id
LEFT OUTER JOIN bookings AS b
ON b.booking_id = bt.booking_id
AND b.event_id = 5
GROUP BY test_type
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.