【问题标题】:How to use 'group by' in sub query?如何在子查询中使用“分组依据”?
【发布时间】:2023-03-31 10:21:01
【问题描述】:

我想在一个状态(在本例中为“isDriving”)找到每个驱动程序 ID 的百分比。这是我的数据集:

(id, duration, state, driverid) VALUES ('1', '3000', 'isDriving', 'b65');

(id, duration, state, driverid) VALUES ('1', '2500', 'isDriving', 'b65');

(id, duration, state, driverid) VALUES ('1', '500', 'isIdling', 'b65');

(id, duration, state, driverid) VALUES ('1', '5500', 'isIdling', 'b65');

(id, duration, state, driverid) VALUES ('1', '300', 'isDriving', 'b34');

(id, duration, state, driverid) VALUES ('1', '200', 'isIdling', 'b34');

(id, duration, state, driverid) VALUES ('1', '200', 'isDriving', 'b15');

(id, duration, state, driverid) VALUES ('1', '500', 'isIdling', 'b15');

我试过这个查询:

select driverid, 
    (sum(duration) / (select sum(duration) from table_name1 group by driverid)) * 100 as percent
from table_name1 
where state='isDriving' 
group by driverid

我希望输出是这样的:

------------------
driverid  percent |
------------------
b65         50    |
b34         60    |
b15         28.6  |

但告诉我:子查询返回超过 1 行

【问题讨论】:

    标签: sql group-by subquery


    【解决方案1】:

    使用条件聚合:

    select 
      driverid,
      round(100.0 * sum(case when state = 'isDriving' then duration else 0 end) / sum(duration), 1) percent    
    from tablename
    group by driverid;
    

    请参阅demo。
    结果:

    | driverid | percent |
    | -------- | ------- |
    | b15      | 28.6    |
    | b34      | 60      |
    | b65      | 47.8    |
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      相关资源
      最近更新 更多