2016-09-06 35 views
-1

我在MYSQL 5.6使用一个表名为加入表上本身不同的日期和count()

+---------+-------+---------+ 
| 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

已删除帖子.... – user3741598

+0

这是助手表和左连接。创建一个辅助表。请参阅http://stackoverflow.com/a/37739514 – Drew

+0

你说“每记录一次”,但你真的只是在示例数据中显示几个月。作为一个独特的时代,你认为什么? – shawnt00

回答

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 
0

试试这个

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