2016-02-19 68 views
0

我一直在掙扎,真的很感激一些幫助:如何能在同一個表合併兩列,計算其獨特的出現

我有兩個表車和騎

cars 
car_id car_manuf car_model 
    1 Honda  CRV 
    2 Honda  Accord 
    3 Toyota  Corolla 
    4 Toyota  Camry 
    5 Ford  Fusion 

rides 
ride_id car_id ride_destination 
     1  3 Boston 
     2  5 New York 
     3  5 Washington DC 
     4  1 California 
     5  2 Dallas 
     6  5 Canada 

我想請計算每個車型的乘車次數,該車型將包含car_manuf和car_model的組合,並且應該按照從最多到最少的次數排序。

輸出應該是:

CarType-NumberofRides 
Honda_CRV-1 
Honda_Accord-1 
Toyota_Corolla-1 
Toyota_Camry-0 
Ford_Fusion-3 

用最少量的遊樂設施

排序輸出
CarType-NumberofRides 
Toyota_Camry-0 
Honda_Accord-1 
Toyota_Corolla-1 
Honda_CRV-1 
Ford_Fusion-3 

mycode的:

select 
    c.car_manuf + '_' + c.car_model AS 'Car Type', 
    (select count(*) from rides r where r.car_id = c.car_id) AS 'Number of Rides' 
from cars c; 

我還挺這裏,而不是陷入不確定哪個方向我應該去關於獲得正確的輸出。

+0

處理的格式在應用程序代碼 – Strawberry

回答

0

當出現問題時,您必須使用GROUP BYORDER BY。我使用CONCAT連接字符串而不是+號。使得正在發生的事情變得更清楚,並且不會被誤認爲算術運算。

SELECT CONCAT(c.car_manuf, '_', c.car_model) AS CarType, COUNT(r.car_id) AS NumberOfRides 
FROM rides r 
LEFT JOIN cars c ON (r.car_id = c.car_id) 
GROUP BY CarType 
ORDER BY NumberOfRides ASC 

然而,這忽略了0次出現。

如果你想看到的0以及交換表以:

SELECT CONCAT(c.car_manuf, '_', c.car_model) AS CarType, COUNT(r.car_id) AS NumberOfRides 
FROM cars c 
LEFT JOIN rides r ON (r.car_id = c.car_id) 
GROUP BY CarType 
ORDER BY NumberOfRides ASC 
+0

我怎麼會得到遊樂設施的數的總和爲每個組CarType的?具有「GROUP BY carType」將所有carType放置在每個單獨的唯一組中,但不會增加總騎乘次數。例如:我有以下輸出 - CarType-NumberofRides - Toyota-Corolla-4,Toyota Corolla-5,Ford-Fusion-6,帶有「Group BY」輸出顯示,Toyota-Corolla-4,Ford-Fusion-6 。相反,它應該輸出豐田-Corolla-9,Ford-Fusion-6。我怎樣才能得到這個遊樂設施的總和? – IronBat

+0

它將相同的東西組合在一起,在您的示例中,看起來有些東西似乎略有不同(例如,與豐田卡羅拉一起短跑)。如果有機會,請清理數據以便分組。否則,添加一個ID,以不同的名稱,但打算是相同的類型和組。但那將是一個新問題 –

相關問題