繁体   English   中英

MySQL使用联接对多个表中的行进行计数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM