Выберите значение SQL из столбца, где отдельный столбец равен MIN ()

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

Пример:

userID    pending
------    -------
0         3
1         0 <----This user has the least pending of all
2         4

Как настроить запрос SQL для возврата идентификатора пользователя с наименьшим количеством ожидающих запросов таблицы?

$sql="SELECT user_id FROM writerdata_tb WHERE pending = '//Minimum pending here//' LIMIT 1";
$assign = $conn->query($sql);
$row = $assign->fetch_assoc();

1

Решение

Сравнение различных возможных ответов предлагается:

EXPLAIN SELECT aa.userId, aa.pending
FROM writerdata_tb AS aa
INNER JOIN writerdata_tb AS bb
ON aa.userId = bb.userId
WHERE aa.pending >= bb.pending
ORDER BY aa.pending ASC
LIMIT 1;

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1   SIMPLE  aa  ALL     PRIMARY     NULL    NULL    NULL    4   Using temporary; Using filesort
1   SIMPLE  bb  ALL     PRIMARY     NULL    NULL    NULL    4   Using where; Using join buffer (Block Nested Loop)

EXPLAIN SELECT userId, pending
FROM writerdata_tb
WHERE pending = (
SELECT MIN(pending)
FROM writerdata_tb
);

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1   PRIMARY     writerdata_tb   ALL     NULL    NULL    NULL    NULL    4   Using where
2   SUBQUERY    writerdata_tb   ALL     NULL    NULL    NULL    NULL    4   NULL

EXPLAIN SELECT userId, pending
FROM writerdata_tb
ORDER BY pending ASC
LIMIT 1;

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1   SIMPLE  writerdata_tb   ALL     NULL    NULL    NULL    NULL    4   Using filesort

EXPLAIN SELECT t.userId
FROM writerdata_tb AS t
GROUP BY (
t.userId
)
ORDER BY SUM(pending) ASC
LIMIT 1;

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1   SIMPLE  t   index   PRIMARY     PRIMARY     4   NULL    4   Using temporary; Using filesort
1

Другие решения

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

Теперь я вижу случай с Александаром Миладиновичем, если в таблице много строк с одинаковым значением в ожидании: вы можете выполнить:

  1. Запрос для получения минимального значения в ожидании колонка
  2. Используйте значение, полученное на предыдущем шаге, чтобы получить строки с этим значением

    SELECT user_id FROM writerdata_tb WHERE pending = (SELECT min (в ожидании) FROM writerdata_tb)

0

Попробуйте следующим образом: выберите userID из writerdata_tb, где pending = (выберите min (pending) из writerdata_tb);

0

Если идентификаторы повторяются

SELECT
t.userID
from
tasks as t
group by (t.userID)
order by sum(pending) asc
limit 1

еще

SELECT
t.userID
from
tasks as t
order by pending asc
limit 1
0
По вопросам рекламы [email protected]