2013-11-13 4 views
0

Я хочу показать, сколько автомобилей продано и какой цвет у них был.SQL count количество ПРОДАНО АВТОМОБИЛИ и счет РАЗЛИЧНЫЙ ЦВЕТ

Мне нужно показать все марки автомобилей, которые находятся в таблице: автомобили. Общее количество автомобилей, которые продаются (см. Таблицу: car_sales), и сколько из этих автомобилей имеют цвет красный или синий.

Он должен выглядеть следующим образом:

Car  | totalQuantity | Quantity red | Quantity blue 
------------------------------------------------------------ 
BMW  |  3  |  1  |  2 
Mercedes |  1  |  1  |  0 
Audi  |  2  |  2  |  0 
Chevrolet |  0  |  0  |  0 
Nissan  |  1  |  0  |  1 
Renault |  0  |  0  |  0 
Peugeot |  0  |  0  |  0 

это мои две таблицы:

стол: автомобили

Car_id | Car_brand   
------------------------ 
    2356  | BMW   
    2359  | Mercedes 
    2358  | Audi 
    2544  | Chevrolet   
    2152  | Nissan 
    2245  | Renault 
    2253  | Peugeot 

стол: car_sales

sales_id  | Car_brand | color  | car_id | sales_date 
--------------------------------------------------------------- 
    45654556  | BMW  | red  | 2356 | 03.02.2009 
    63654552  | Mercedes | red  | ... | ... 
    45654565  | BMW  | blue  | ... | ... 
    41456921  | Audi  | red  |   | 
    36636545  | Nissan | blue  |   | 
    45654565  | BMW  | blue  |   | 
    41456921  | Audi  | red  |   | 

Я надеюсь, что вы может помочь мне. Имейте славный день.

+3

Вы проделали очень хорошую работу, объясняя, что вы хотите делать; единственное, чего не хватает, это SQL, который вы написали, чтобы попробовать и сделать это самостоятельно. Пожалуйста, отредактируйте и покажите хотя бы некоторые усилия для решения проблемы. –

+0

Потому что 'PIVOT' - это 11-мегагерцовая функция, вы можете указать свою версию Oracle? – SQLMason

+1

Просто замечание: ваш дизайн стола лишний. Обычно вы хотите избавиться от колонки car_brand в car_sales, потому что информация доступна в табличных машинах. (В системе хранилища данных, возможно, вы захотите избавиться от табличных машин, так что есть еще избыточность, но простой доступ без необходимости объединения таблиц.) –

ответ

1

Если цвета прикреплены к красным и синим должно работать:

select c.brand, 
     count(*) as total_quantity, 
     count(case when cs.color = 'red' then 1 end) as quantity_red, 
     count(case when cs.color = 'blue' then 1 end) as quantity_blud 
from cars c 
    join car_sales cs on c.car_id = cs.car_id 
group by c.brand; 

Если у вас есть больше цветов (но все-таки исправить номер), вы можете захотеть взглянуть на оператора PIVOT (поиск по сайту , для этого есть тег).

Если у вас есть неизвестное количество цветов, это будет беспорядочно, так как вам нужен динамический SQL и хранимые процедуры - в этом случае лучше что-то сделать в инструменте отчетности (например, Excel очень хорош в создании опорных точек запросы)

Смежные вопросы