我们如何限制SQL中一列中的每个特定值[重复]

问题描述 投票:0回答:3

这个问题在这里已有答案:

对不起,如果这是一个愚蠢的问题。我可以在ORDER BY函数中命令我的列,我可以使用LIMIT函数,但它只给我最高值,但我需要每个最高值限制。

所以我的虚拟表在这里:

Col-a   col-b
A        1001
B        1000
B        999
C        998
A        997
C        996
A        995
A        994
A        993
A        992
B        991
C        990

我的期望是(LIMIT 3;)

col_a    col_b                      col_a   col_b   col_c   col_d   col_e   col_f
A       1001                        A       1001     B       1000    C       998
B       1000                        A       997      B       999     C       996
B       999                         A       995      B       991     C       990
C       998               or
A       997          
C       996
A       995
B       991
C       990

我使用FIELD()但不幸的是我无法管理。我们如何订购特定的电话。

ORDER BY函数顺序所有值,但我需要将每个值取一个特定的数字。当我使用LIMIT函数时只切顶值问题是如何在“1列”中命令每个不同的值

编辑:我试过了

SELECT col_a,col_b FROM my_table 
order BY FIELD(col_b, 'A','B','C') limit 100;
mysql sql greatest-n-per-group
3个回答
0
投票

可能有一个更有效的方法,但这可能会让你到达你想去的地方:

SELECT group_a.col_a AS col_a
       ,group_a.col_b AS col_b
       ,group_b.col_a AS col_c
       ,group_b.col_b AS col_d
       ,group_c.col_a AS col_e
       ,group_c.col_b AS col_f
FROM (SELECT col_a, col_b FROM my_table WHERE col_a = 'A' ORDER BY col_b DESC LIMIT 100) as group_a,
     (SELECT col_a, col_b FROM my_table WHERE col_a = 'B' ORDER BY col_b DESC LIMIT 100) as group_b,
     (SELECT col_a, col_b FROM my_table WHERE col_a = 'C' ORDER BY col_b DESC LIMIT 100) as group_c

0
投票

尽管采用了不同的格式,但为您提供所需的内容。请检查并告诉我这是否适合您

选择COL-A,MIN(COL-B),导联(MIN(COL-B),1)(按MIN(COL-B)排序),导联(MIN(COL-B),2)结束(按顺序排列)来自audit.latest_job_instance的MIN(COL-B))其中COL-B不为空GROUP BY COL-A


-1
投票

试试这个:根据分区列-a给出排名,按列-b desc排序。选择rank <= 3的行此查询将提供预期结果(1)表示2列(col_a和col_b)

select [col-a], [col-b]
from
( select [col-a], [col-b], row_number() over(partition by [col-a] order by [col-b] desc) rnk from table2 
) tbl
where rnk <= 3

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.