【发布时间】:2019-10-25 01:48:11
【问题描述】:
我有一个简单的表,id,key,level,table和data是这样的:
id key level
1 a 1
2 a 2
3 a 3
4 a 3
5 b 1
6 b 3
7 c 1
8 c 2
9 c 2
问题是:我传入一个 id 数组(数据库支持在操作中查找),我只想计算给定 id 列表中的最高级别并按键分组。 例如:我传入[2,3],返回的数据应该是:
key toplevel count
a 3 1
我传入[2,3,8,9],返回的数据应该是:
key toplevel count
a 3 1
c 2 2
不知道我的问题有没有描述清楚(英文不好),不懂的可以问我。
【问题讨论】:
-
我的回答很冗长,希望你能转换成逻辑。首先使用传入的数组过滤出您想要的行,将其称为表 X。然后执行 (Select key, level, count(*) from X group by key, level) 作为 Y。现在按 desc 顺序逐级使用 row_number 函数并只保留第一行。
-
它确实有效:我可以像这样使用 sql:
select * from (select *,"row_number"() over (PARTITION by key order by LEVEL desc) rn from (select key,level,count(*) as counts from (select * from tbl_test where id in (2,3,8,9)) as idlist group by key,level) as tmp1) as tmp2 where rn = 1 ;@karanpatel -
先搞清楚你用的是哪个RDBMS,然后看meta.stackoverflow.com/questions/333952/…
标签: mysql sql postgresql group-by