加入 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
我在 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