[英]Grouping columns by type
我有一个这样的主表
+----------------------------------------------+
| id | user_id | date | vehicle_type |
+----------------------------------------------+
| 1 | 1 | 2017-06-01 | 1 |
| 2 | 1 | 2017-06-01 | 2 |
| 3 | 1 | 2017-06-01 | 1 |
| 4 | 1 | 2017-06-02 | 2 |
| 5 | 1 | 2017-06-02 | 1 |
| 6 | 2 | 2017-06-01 | 2 |
| 7 | 2 | 2017-06-01 | 1 |
| 8 | 2 | 2017-06-01 | 2 |
| 9 | 2 | 2017-06-02 | 1 |
+----------------------------------------------+
我想按user_id
和date
进行分组,并根据其值对vehicle_type求和,并将其创建为视图。 这是我想要的输出
+------------------------------------------------+-------------------+
| id | user_id | date | vehicle_type_1 | vehicle_type_2 |
+------------------------------------------------+-------------------+
| 1 | 1 | 2017-06-01 | 2 | 2 |
| 4 | 1 | 2017-06-02 | 1 | 1 |
| 6 | 2 | 2017-06-01 | 1 | 2 |
| 9 | 2 | 2017-06-02 | 1 | 0 |
+------------------------------------------------+-------------------+
问题是获得我想要的输出的最佳sql(query)。 谢谢,
SELECT user_id
,date
,SUM(IIF(vehicle_type = 1,1,0)) as vehicle_type_1
,SUM(IIF(vehicle_type = 2,1,0)) as vehicle_type_2
FROM yourtable
GROUP BY user_id, date
我不明白为什么你需要输出中的ID。 如果确实需要,只需在select子句中添加MIN(id)或MAX(id)
您需要使用case语句来获取所需的输出。 尝试以下一项
select max(id) id,user_id,date,sum(case when vehicle_type=1 then 1 else 0 end) vehicle_type_1,sum(case when vehicle_type=2 then 1 else 0 end) vehicle_type_2 from urtable
group by user_id,date
根据上述问题的描述作为解决方案,请尝试执行以下SQL select查询
SELECT user_id,
date,
Count(id) AS vehicle_type_1,
(SELECT Count(id)
FROM mytbl
WHERE vehicle_type = 2
AND user_id = tbl.user_id
AND date = tbl.date
GROUP BY user_id,
date) AS vehicle_type_2
FROM mytbl AS tbl
WHERE vehicle_type = 1
GROUP BY user_id,
date
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.