我在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赛车
答案 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