SQL: выберите элемент в одном столбце на основе значения другого столбца.

0

У меня есть таблица, которая выглядит так:

+-----+----+
|A    |B   |
+-----+----+
|    1|   0|
|    2|   1|
|    2|   1|
|    2|   1|
|    2|   2|
|    3|   1|
|    4|   1|
|    5|   1|
|    5|   2|
|    6|   2|
|    7|   2|
|    8|   2|
+-----+----+

Я хочу выбрать значения A, где значение B является самым низким. но хотите сохранить повторения. Скажем, у меня есть 3 пары таких, что (4,5), (4,5), (4,6), я хочу, чтобы результат был (4,5), (4,5).

Для приведенной выше таблицы я хотел бы, чтобы результат был

+-----+----+
|A    |B   |
+-----+----+
|    1|   0|
|    2|   1|
|    2|   1|
|    2|   1|
|    3|   1|
|    4|   1|
|    5|   1|
|    6|   2|
|    7|   2|
|    8|   2|
+-----+----+

Я пытался сделать что-то подобное, но я потерялся!

SELECT t1.A, t1.B from table t1 JOIN table t2
WHERE t1.B >= t2.B
ORDER BY B DESC

Любые подсказки оцениваются!

Теги:

3 ответа

1
Лучший ответ

Это должно работать:

select t1.* from mytable t1
join
    (select A, min(B) as B from mytable group by A) t2
on t1.A = t2.A and t1.B = t2.B
  • 0
    Спасибо, но что такое «т» в самом конце?
  • 0
    Я исправил это, это была опечатка.
Показать ещё 6 комментариев
0

Вы можете использовать подзапрос. Сначала определите все столбцы, удовлетворяющие условию. Затем отфильтруйте записи, используя где.

select A,B from(
        select A,B, case when B<A then 'Y' else 'N' end as C from table)
        where C = 'Y'
0
SELECT
a.A, a.B
FROM table1 a WHERE B=(select MIN(b) FROM table1)
ORDER BY B DESC
  • 0
    Это неверно как насчет одного ряда = (3,2)?
  • 0
    Это дает только правильный ответ, потому что случается так, что обе минуты = 1, но с большим количеством данных это не сработает.

Ещё вопросы

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