MySQL使用join对多个表中的行进行计数
我有3个MySQL表:MySQL使用join对多个表中的行进行计数,mysql,sql,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
**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张已在预订
表中兑换的凭单,其中2张是155.00价值凭单,1张是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
[sql小提琴]
[sql小提琴]
[sql小提琴]
[sql FIDLE]您应该这样做:
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
你应该这样做:
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
你应该这样做:
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
你应该这样做:
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
我已经用我到目前为止写的内容更新了我的帖子,但我不确定如何加入预订表。我已经用我到目前为止写的内容更新了我的帖子,但我不确定如何加入预订表。我已经用我到目前为止写的内容更新了我的帖子,但我不确定如何加入预订表。我已经用我所拥有的内容更新了我的帖子到目前为止还没有编写,但我不确定如何加入bookings表。谢谢,即使bookings表中没有对应的行,也会始终返回每个位置的计数吗?对其进行了修改,使带有
0
兑换的位置也显示出来。我注意到此查询存在以下问题:,如果我在子查询(即where bookings.location\u id=1
)中提供where
子句,它将在匹配的实际行之前返回一个空行(所有空值)。知道为什么吗?你可以把它添加到外部查询中。像a.id=1
谢谢,即使bookings表中没有对应的行,它也会始终返回每个位置的计数吗?修改它,使0
兑换的位置也显示出来。我注意到这个查询有一个问题,如果我在子查询中提供where
子句(即其中bookings.location_id=1
)它返回一个空行(所有空值)在匹配的实际行之前。知道原因吗?您可以将其添加到外部查询中。例如a.id=1
谢谢,即使在预订表中没有对应的行,它也会始终返回每个位置的计数吗?对其进行了修改,以使0
兑换的位置也显示出来。我注意到了这方面的问题在此查询中,如果我在子查询(即where bookings.location\u id=1
)中提供where
子句,它将返回一个空行(所有空值)在匹配的实际行之前。知道原因吗?您可以将其添加到外部查询中。例如a.id=1
谢谢,即使在预订表中没有对应的行,它也会始终返回每个位置的计数吗?对其进行了修改,以使0
兑换的位置也显示出来。我注意到了这方面的问题在该查询中,如果我在子查询(即where bookings.location\u id=1
)中提供where
子句,它将在匹配的实际行之前返回一个空行(所有空值)。知道原因吗?可以将其添加到外部查询中。如a.id=1