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

标签 mysql sql

我有 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 值(value)的代金券,一张是 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 fiddle ] http://sqlfiddle.com/#!9/daefd/19

关于MySQL 使用 join 对多个表中的行进行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31653618/

相关文章:

php - php中如何将字符串转换为数组

php - Grocery Crud 设置 3 个表之间的关系

sql - 打开读取提交快照将如何影响使用 WITH(ROWLOCK、READPAST)的数据队列?

mysql - MIN() 导致 MySQL 返回全空行而不是 0 行

php - 从多个表中选择列的总和并按 id 分组

java - 如何在数据库( hibernate )中计算表中的值?

mysql 如果按顺序日期不存在数据

java - 连接到 MySQL Web 数据库并使用 Pictures Android 列出结果

php - 将相同内容的列相乘,算作 "one"

java - 从序列中获取下一个值