我有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
我试图显示每个位置的凭证净值计数。例如,你可以看到伦敦'伦敦' location有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
答案 0 :(得分:2)
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 fiddle] http://sqlfiddle.com/#!9/daefd/19
答案 1 :(得分:1)
你应该这样做:
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