一个如何编写SQL语句问题。

发布于 2022-09-11 23:08:32 字数 325 浏览 28 评论 0

有如下表,同一种key,可能对应不同的level。
image.png
需求是:传入一个id list,要求返回的数据为:
按照key分组,只统计id里对应的最高的那个level的数量,例如,传入的idlist是[2,3],那么返回的数据应该为a,3,1(3代表最高level,1代表数量),传入的idlist是[2,3,8,9],返回的数据是a,3,1;c,2,2。
有没有一条sql能够解决的方案呢!(sql支持find in操作,例如find in (id1,id2...))

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

方圜几里 2022-09-18 23:08:32

表:

CREATE TABLE `t_keys` (
  `id` int(11) DEFAULT NULL,
  `k` varchar(20) DEFAULT NULL,
  `level` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

sql:下面两种都可以

//第一种写法
select a.k,a.level ,count(1) as "count" from t_keys a where a.id in(2,3)
and a.level >=  (select max(b.level) from  t_keys b where b.k = a.k and b.id in(2,3))
group by a.k,a.level;


//第二种写法
select a.k,max(a.level) as "level",sum(
    case 
            when a.level >=  (select max(b.level) from  t_keys b where b.k = a.k and b. id in(2,3) ) then 1 else 0
   end
) as "count" from t_keys a where a.id in(2,3) group by a.k;

盛夏已如深秋| 2022-09-18 23:08:32

先写个复杂点的

select t1.`key`,t1.max_lev,count(1)
from (
select `key`,max(`level`) max_lev
 from seg_key_level 
 where id in (2,3,8,9)
 group by `key`
)t1 inner join seg_key_level t2 on t1.`key`=t2.`key` and t1.max_lev=t2.`level`
where t2.id in (2,3,8,9)
group by t1.`key`,t1.max_lev;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文