Как мы можем ограничить каждое конкретное значение в одном столбце в SQL [дубликата]

0

Извините, если это глупый вопрос. Я могу заказать свою колонку в функции 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 колонке"

EDIT: я попробовал

SELECT col_a,col_b FROM my_table 
order BY FIELD(col_b, 'A','B','C') limit 100;
Теги:
greatest-n-per-group

3 ответа

0

Попробуйте это: дайте ранг на основе столбца раздела a и order by column-b desc. Выберите строки, где ранг <= 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

Изображение 174551

0

Дает вам то, что вам нужно, хотя в немного другом формате. Пожалуйста, проверьте и сообщите мне, если это сработает для вас

выберите COL-A, MIN (COL-B), свинец (MIN (COL-B), 1) over (порядок MIN (COL-B)), свинец (MIN (COL-B), 2) MIN (COL-B)) из audit.latest_job_instance, где COL-B не является нулевым. GROUP BY COL-A

  • 0
    Пожалуйста, прочтите справку по редактированию кода. Вы можете увидеть форматированный вывод под окном редактирования.
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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню