繁体   English   中英

按类型分组列

[英]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_iddate进行分组,并根据其值对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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM