MySQL计数有多个连接和分组

时间:2013-01-10 16:52:41

标签: mysql outer-join

我似乎无法找到构建此查询的正确方法,而且我知道有一种方法可以使用纯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'

由于还没有任何'技能'预订(预订可以有多种类型)我希望结果包括像' Skill' | 0.此外,如果没有预订,它应该有3个零行,在这种情况下每个event_type一个。

感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:2)

尝试将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

请参阅SQL Fiddle with Demo