2016-02-20 56 views
1

我一直在掙扎,真的很感激一些幫助:如何總結實例的總數爲特定的獨特價值

我有兩個表車和騎

create table cars 
(cars_ID Int (10), 
manuf varchar (30), 
model varchar (30)); 

create table rides 
(ride_ID Int (10), 
cars_ID varchar (30), 
ride_dest varchar (30)); 

insert into cars (cars_ID, manuf, model) values (1, 'Honda', 'CRV'); 
insert into cars (cars_ID, manuf, model) values (2, 'Ford', 'Fusion'); 
insert into cars (cars_ID, manuf, model) values (3, 'Toyota', 'Corolla'); 
insert into cars (cars_ID, manuf, model) values (4, 'Toyota', 'Camry'); 
insert into cars (cars_ID, manuf, model) values (5, 'Ford', 'Fusion'); 
insert into cars (cars_ID, manuf, model) values (6, 'Ford', 'Fusion'); 
insert into cars (cars_ID, manuf, model) values (7, 'Ford', 'Fusion'); 
insert into cars (cars_ID, manuf, model) values (8, 'Ford', 'Fusion'); 
insert into cars (cars_ID, manuf, model) values (9, 'Ford', 'Fusion'); 


insert into rides (ride_ID, cars_ID, ride_dest) values (1, 3, 'Boston'); 
insert into rides (ride_ID, cars_ID, ride_dest) values (2, 5, 'New York'); 
insert into rides (ride_ID, cars_ID, ride_dest) values (3, 5, 'Washington DC'); 
insert into rides (ride_ID, cars_ID, ride_dest) values (4, 1, 'California'); 
insert into rides (ride_ID, cars_ID, ride_dest) values (5, 2, 'Dallas'); 
insert into rides (ride_ID, cars_ID, ride_dest) values (6, 5, 'Canada'); 
insert into rides (ride_ID, cars_ID, ride_dest) values (7, 5, 'Canada'); 
insert into rides (ride_ID, cars_ID, ride_dest) values (8, 1, 'Canada'); 
insert into rides (ride_ID, cars_ID, ride_dest) values (9, 5, 'Canada'); 
insert into rides (ride_ID, cars_ID, ride_dest) values (10, 3, 'Canada'); 

輸出,用於汽車:select * from cars;

cars_ID-manuf-model 

1-Honda-CRV 
2-Ford-Fusion 
3-Toyota-Corolla 
4-Toyota-Camry 
5-Ford-Fusion 
6-Ford-Fusion 
7-Ford-Fusion 
8-Ford-Fusion 
9-Ford-Fusion 

輸出兜風:select * from rides;

ride_ID-cars_ID-ride_dest 

1-3-Boston 
2-5-New York 
3-5-Washington 
4-1-California 
5-2-Dallas 
6-5-Canada 
7-6-Canada 
8-7-Canada 
9-8-Canada 
10-9-Canada 

我想計算每種車型的乘車次數(car_manuf和car_model的組合)輸出應該顯示每個carType的乘車數量總和,並且應該按照從最多到最少的乘數排序。

輸出應該是:

CarType-NumberofRides 

Ford-Fusion - 8 
Toyota-Corolla - 1 
Honda-CRV - 1 
Toyota-Camry - 0 

mycode的:沒有GROUP BY

SELECT CONCAT(c.manuf, '-', c.model) AS 'CarType', 
    (select count(*) from rides r where r.cars_ID = c.cars_ID) AS 'NumberOfRides' 
from cars c 
order by NumberofRides ASC; 

MyOutput中:沒有GROUP BY

CarType-NumberOfRides 
Toyota-Camry - 0 
Toyota-Corolla - 1 
Ford-Fusion - 1 
Honda-CRV - 1 

mycode的:與GROUP BY

SELECT CONCAT(c.manuf, '-', c.model) AS 'CarType', 
    (select count(*) from rides r where r.cars_ID = c.cars_ID) AS 'NumberOfRides' 
from cars c 
GROUP BY CarType 
order by NumberofRides ASC; 

MyOutput中:沒有GROUP BY

CarType-NumberOfRides 

Toyota-Camry - 0 
Toyota-Corolla - 1 
Ford-Fusion - 1 
Ford-Fusion - 1 
Ford-Fusion - 1 
Honda-CRV - 1 
Ford-Fusion - 1 
Ford-Fusion - 1 
Ford-Fusion - 3 

這不是我要找的輸出。相反,所有的CarType都應該顯示遊樂設施的總數量。

正確的輸出是:

CarType-NumberofRides 

Ford-Fusion - 8 
Toyota-Corolla - 1 
Honda-CRV - 1 
Toyota-Camry - 0 

我怎樣才能得到正確的輸出?我是否必須使用SUM,如果是的話,它將如何放置?

回答

1

你不需要子查詢,你應該加入這兩個表。

SELECT CONCAT(c.manuf, '-', c.model) AS CarType, COUNT(r.ride_ID) AS NumberofRides 
FROM cars AS c 
LEFT JOIN rides AS r ON r.cars_ID = c.cars_ID 
GROUP BY CarType 
ORDER BY NumberofRides DESC 

LEFT JOIN確保不乘坐汽車將被列入加入。那些行中對應的ride_ID將爲NULL,並且COUNT(r.ride_ID)不會計入空值。

+0

Barmar - 這對我來說是一次很棒的學習經歷。非常感謝你的幫助。你一直很有幫助。感謝您使用LEFT JOIN的解釋。 – IronBat