为不同的日期和count()连接表

时间:2016-09-06 15:49:27

标签: mysql sql select join self-join

我在MYSQL 5.6上使用一个名为 ride 的表

+---------+-------+---------+
|  Date   | CarId | Airport |
+---------+-------+---------+
| 2001-11 |     1 | JFK     |
| 2001-11 |     2 | JFK     |
| 2001-11 |     3 | LAX     |
| 2001-12 |     1 | JFK     |
| 2001-12 |     2 | JFK     |
| 2001-12 |     3 | JFK     |
+---------+-------+---------+

在列日期中,有很多日期都有重复项。 对于所有不同日期的列表,我运行此查询:

SELECT DISTINCT date from ride;

我有两个约会✅

我的目标是在特定机场的每个记录时间知道汽车数量。 所以我想我必须加入同一张桌子。

   SELECT DISTINCT r.date, count(x.CarId) as car from ride r JOIN ride x on r.date = x.date WHERE x.airport = "LAX";

这里我只有一排日期2001-11和3辆车。 ❌

获得这样的内容的正确查询是什么:

2001-11 LAX 1 car

或者数据结构是否不可能? 2001-12 LAX 0赛车

2 个答案:

答案 0 :(得分:0)

试试这个

SELECT Date , count(CarId) From ride GROUP BY Date , Airport ; 

答案 1 :(得分:0)

我假设您的所有日期和机场都在数据中表示。问题是,在2001 - 12年度,您没有像LAX那样至少有一个记录的实例中的每个组合

这是一个常见的问题。关键是生成要报告的所有组合,这就是交叉连接的原因。然后使用外部联接将您拥有的数据附加到该模板。

select d.Date, a.Airport, count(r.CarId) /* you may want count(distinct r.CarId) */
from
    (select distinct Date from ride) d
    cross join
    (select distinct Airport from ride) a
    left outer join ride r
        on r.Date = d.Date and r.Airport = a.Airport
group by d.Date, a.Airport