我有三个表:Products、Requests、Bookings。
Table Products (with all product categories):
name, ..
A1, ..
A1, ..
A2, ..
A2, ..
A2, ..
A3, ..
B1, ..
..
Table Requests (with a state for every request):
name, failed
A1, 0
A2, 1
A3, 0
A2, 0
..
Table Bookings:
name, ..
A1, ..
A2, ..
..
我需要的是包含如下摘要数据的合并输出:
prod_category, count_requests, count_failed, count_bookings
A1, 1, 0, 1
A2, 2, 1, 1
A3, 6, 0, null
B1, null, null, null
我已经有三个单独的查询 - 它们运行良好,但我无法只使用一个查询。
这是我的一个 sql 查询的示例:
SELECT
T2.n AS category_name, T1.c AS count_requests
FROM
(SELECT
object_name as n,
count(object_name) as c
FROM
requests
GROUP BY n) T1
RIGHT JOIN
(SELECT distinct
object_name as n
FROM
products) T2 ON T1.n = T2.n
ORDER BY T2.n ASC;
查询的输出:
# category_name, count_requests
'A1', '8'
'A2', '3'
'C1', NULL
'E1', '9'
'E2', '16'
'E3', '3'
'F1', '1'
最佳答案
假设所有未失败的请求也导致预订中的一行,则根本不需要加入预订。
select p.name,
count(r.name) as count_requests,
sum(r.failed) as count_failed,
count(r.name) - sum(r.failed) as count_bookings
from products p
left join requests r on (p.name = r.name)
group by p.name;
关于MySQL连接三个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22877865/