Как получить минимальное значение столбца mysql -таблицы на основе числовой последовательности в строке - PullRequest
1 голос
/ 13 июля 2020

У меня есть таблица mysql (результаты) с шестью столбцами вроде этого:

+----+-------+-------+-------+-------+-------+
| id | can_1 | can_2 | can_3 | can_4 | can_5 |
+----+-------+-------+-------+-------+-------+
|  1 |     1 |     0 |     2 |     4 |     3 |
+----+-------+-------+-------+-------+-------+
|  2 |     2 |     1 |     5 |     3 |     4 |
+----+-------+-------+-------+-------+-------+
|  3 |     3 |     1 |     0 |     0 |     0 |
+----+-------+-------+-------+-------+-------+
|  4 |     0 |     2 |     1 |     0 |     3 |
+----+-------+-------+-------+-------+-------+

Я пытаюсь получить строки с наименьшим значением больше 1 из Столбец can_1 в зависимости от того, какие значения хранятся в каждой строке.

Например: can_1 необходимо вернуть строки (id) 2 и 3, поскольку 2 - это минимальное значение в строке 2, а 3 - это минимальное значение строка 3.

Использование

SELECT id FROM results WHERE can_1 = (SELECT MIN(can_1) FROM results);

возвращает

+----+
| id |
+----+
|  2 |
+----+

Это понятно - MIN-значение проверяет минимальное значение больше 1 во всем столбце ( can_1), что равно 2 в случае can_1. Но как мне это объединить, чтобы минимальное значение строки всей (охватывающей все столбцы) определяло, какие минимальные значения возвращать для столбца can_1, ie. чтобы результат был таким?

+----+
| id |
+----+
|  2 |
+----+
|  3 |
+----+

1 Ответ

1 голос
/ 13 июля 2020

Вы можете сделать это с помощью функции LEAST():

select id
from tablename
where can_1 > 1
and can_1 = least(
  can_1, 
  case when can_2 <= 1 then can_1 + 1 else can_2 end, 
  case when can_3 <= 1 then can_1 + 1 else can_3 end, 
  case when can_4 <= 1 then can_1 + 1 else can_4 end, 
  case when can_5 <= 1 then can_1 + 1 else can_5 end
)

См. demo . Результатов:

| id  |
| --- |
| 2   |
| 3   |
...