SQL计数数量的SOLD CARS和计数不同的颜色

时间:2013-11-13 22:45:53

标签: sql oracle join 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 

table: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      |         |

我希望你能帮助我。 祝你有愉快的一天。

1 个答案:

答案 0 :(得分: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在进行数据透视查询时非常好)