[英]MySQL count rows from multiple tables using join
我有3个MySQL表:
**locations**
id location_name
1 London
2 New York
3 Washington
**bookings**
id voucher_code location_id
1 DISC100 1
2 NULL NULL
3 DISC200 1
4 DISC500 2
5 DISC700 1
**vouchers**
id voucher_code net_value
1 DISC100 155.00
2 DISC200 135.00
2 DISC500 155.00
2 DISC700 155.00
我正在尝试显示每个位置的凭单净值计数。 因此,例如,您可以看到“伦敦”位置有3张已在bookings
表中兑换的凭证,其中2张为155.00值的凭证,一张为135.00。 我需要编写一个MYSQL查询以将这些计数从数据库中取出。
因此,以上述表格为例,我的SQL查询将导致以下结果:
Location netValue155 netVaue135
London 2 1
New York 1 0
Washington 0 0
以下是我到目前为止所写的内容:
select
l.location_name,
'' as date_from,
'' as date_to,
v.netValue155
from locations l
left join (select voucher_code, count(distinct id) as netValue155 from vouchers where net_value='155.00' group by id) as v
select a.location_name, sum(netvalue155), sum(netvalue135) from
(select l.id ,l.location_name,
case when v.net_value = 155 then 1 else 0 end as netvalue155,
case when v.net_value = 135 then 1 else 0 end as netvalue135
from locations l left join bookings b
on l.id = b.location_id
left join vouchers v
on b.voucher_code = v.voucher_code) a
right join locations l on l.id = a.id
group by a.location_name
[sql小提琴] http://sqlfiddle.com/#!9/daefd/19
您应该执行以下操作:
SELECT
l.location_name AS Location,
SUM(IF(v.net_value=155, 1, 0)) AS netValue155,
SUM(IF(v.net_value=135, 1, 0)) AS netVaue135
FROM
locations AS l
LEFT JOIN
bookings AS b ON (l.id = b.location_id)
LEFT JOIN
vouchers AS v ON (v.voucher_code = b.voucher_code)
GROUP BY
l.id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.