简体   繁体   English

如何在子查询中使用“分组依据”?

[英]How to use 'group by' in sub query?

I want to find a percent of each driverid in one state (in this example 'isDriving'). 我想找到一种状态下每个驱动程序ID的百分比(在此示例中为“ isDriving”)。 Here is my data set: 这是我的数据集:

(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');

I have tried this query: 我已经尝试过以下查询:

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

I expect the output like this: 我期望这样的输出:

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

but shows me: Subquery returns more than 1 row 但显示给我:子查询返回的行数超过1

With conditional aggregation: 使用条件聚合:

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

See the demo . 参见演示
Results: 结果:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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