加入 table 自身以获得不同的日期和 count()

Join table on itself for distinct dates and count()

我在 MYSQL 5.6 上有一个名为 ride

的 table
+---------+-------+---------+
|  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;

我有两个约会对象 ✅

我的目标是了解特定机场每个记录时间的汽车数量。 所以我想我必须加入相同的 table.

   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 洛杉矶国际机场 0 辆

试试这个

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

我假设所有日期和机场都显示在数据中。问题是你没有至少一个记录实例 两者的每个组合 就像 2001-12 年的洛杉矶国际机场一样。

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

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