我有下表,我们称其为table_a:
区域 | 车辆名称 | 车辆状态 |
---|---|---|
A | 巴士A1 | 开始 |
A | 巴士A2 | 开始 |
A | 巴士A3 | 停止了 |
B | B1号船 | 准备好 |
B | B2船 | 停止了 |
B | B3号船 | 开始 |
C | 汽车C1 | 准备好 |
C | 汽车C2 | 准备好 |
C | 汽车C3 | 停止了 |
我想从 table_a 创建一个新表:
区域 | 无车辆 | 没有开始 | 没有准备好 | 没有停止 |
---|---|---|---|---|
A | 3 | 2 | 0 | 1 |
B | 3 | 1 | 1 | 1 |
C | 3 | 0 | 2 | 1 |
最有效的方法是什么?
例如
SELECT DISTINCT(ZONE) AS ZONE,
SUM(IF ZONE = 'A' THEN ... IF ZONE = 'B' THEN ...
FROM table_a
SELECT Zone, COUNT(DISTINCT vehicle_name) AS no_of_vehicle, SUM(vehicle_status = 'Start') AS no_of_start, SUM(vehicle_status = 'Ready') AS no_of_ready, SUM(vehicle_status = 'Stopped') AS no_of_stopped FROM table_a GROUP BY Zone;
这个单个 SQL 查询使用条件聚合和按“区域”分组来实现所需的结果。