如何解决如何使用group by查询group by?
我的桌子:
bucket | bytes | url
-----
a | 111 | url_1
a | 222 | url_1
a | 222 | url_2
a | 222 | url_3
a | 222 | url_4
a | 222 | url_5
a | 222 | url_6
a | 222 | url_7
a | 222 | url_8
a | 222 | url_9
a | 222 | url_10
a | 222 | url_11
b | 444 | url_4
b | 555 | url_4
c | 444 | url_5
我要查询:
- 按桶分组,例如
select bucket from table group by bucket
. - 对于每个桶,按 url 分组,例如
select sum(bytes) from table where bucket = <every_one_bucket_in_the_group_by> group by url order by sum(bytes) desc limit 10
。对于每个存储桶,最多有 10 个结果行。
如何组合这两个子查询?
结果应该是:
bucket | url | sum_bytes
----
a | url_1 | 333
a | url_2 | 222
a | url_3 | 222
a | url_4 | 222
a | url_5 | 222
a | url_6 | 222
a | url_7 | 222
a | url_8 | 222
a | url_9 | 222
a | url_10 | 222
b | url_4 | 999
c | url_5 | 444
解决方法
你在下面找到了吗
select bucket,url,sum(bytes) as sumbyte from table
group by bucket,url
order by sumbyte desc
,
您需要使用 limit by 子句:
select bucket,sum(bytes) sum_bytes
from (
/* emulate test dataset */
select data.1 bucket,data.2 bytes,data.3 url
from (
select arrayJoin([
('a',111,'url_01'),('a',222,'url_02'),'url_03'),'url_04'),'url_05'),'url_06'),'url_07'),'url_08'),'url_09'),'url_10'),'url_11'),('b',444,555,('c','url_05')]) data)
)
group by bucket,url
order by bucket,url
limit 10 by bucket
/*
┌─bucket─┬─url────┬─sum_bytes─┐
│ a │ url_01 │ 333 │
│ a │ url_02 │ 222 │
│ a │ url_03 │ 222 │
│ a │ url_04 │ 222 │
│ a │ url_05 │ 222 │
│ a │ url_06 │ 222 │
│ a │ url_07 │ 222 │
│ a │ url_08 │ 222 │
│ a │ url_09 │ 222 │
│ a │ url_10 │ 222 │
│ b │ url_04 │ 999 │
│ c │ url_05 │ 444 │
└────────┴────────┴───────────┘
*/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。