Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL使用join对多个表中的行进行计数_Mysql_Sql - Fatal编程技术网

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

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

我有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张已在
预订
表中兑换的凭单,其中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