一尘不染

SQL查询以从每个类别中选择底部2

sql

在Mysql中,我想从每个类别中选择最下面的2个项目

Category Value
1        1.3
1        4.8
1        3.7
1        1.6
2        9.5
2        9.9
2        9.2
2        10.3
3        4
3        8
3        16

给我:

Category Value
1        1.3
1        1.6
2        9.5
2        9.2
3        4
3        8

从sqlite3迁移之前,我必须首先从每个类别中选择一个最低的类别,然后再排除与之相关的任何内容,我必须再次从每个类别中选择一个最低的类别。然后,等于该类别中新的最低或更少的任何事物都会获胜。如果出现平局,这也将选择2个以上,这很烦人。。。它的运行时间也很长。

我的最终目标是计算一个人进入该类别的最低2分之一(也有一个姓名字段)的次数,这是我不知道该怎么做的一部分。谢谢


阅读 154

收藏
2021-03-17

共1个答案

一尘不染

您可以尝试以下方法:

SELECT * FROM (
  SELECT c.*,
        (SELECT COUNT(*)
         FROM user_category c2
         WHERE c2.category = c.category
         AND c2.value < c.value) cnt
  FROM user_category c ) uc
WHERE cnt < 2

它应该给您想要的结果,但是请检查性能是否还可以。

2021-03-17