2016-09-06 37 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 ;