Как получить идентификатор наименьшего числа в MySQL, используя функцию MIN () - PullRequest
6 голосов
/ 24 ноября 2011

образец таблицы

id |   name   | price |
-----------------------
1  |   john   | 300   |
----------------------- 
2  | michael  |  400  |
----------------------- 
3  | michelle |  250  |
-----------------------

Я получу наименьшее число в таблице, используя этот запрос

SELECT id, name, MIN(price) FROM table

Результат станет таким:

_______________________
id |   name   | price |
-----------------------
1  | michelle |  250  |

Я хочу, чтобы результат стал таким:

id |   name   | price |
-----------------------
3  | michelle |  250  |
-----------------------

Заранее спасибо!

Ответы [ 6 ]

7 голосов
/ 24 ноября 2011

Самый простой способ получить идентификатор наименьшего числа - это:

SELECT Id, name, price
FROM sampleTable
ORDER BY price ASC 
LIMIT 1;

Если вы хотите использовать MIN (как указано в заголовке), один из способов сделать это будет следующим:

SELECT id, name, price 
FROM sampleTable 
WHERE price = (SELECT MIN(price) from sampleTable)
4 голосов
/ 24 ноября 2011

Использовать подзапрос:

SELECT id, name, price 
FROM table 
WHERE price = (SELECT min(price) FROM table);

Без LIMIT 1 это может вернуть несколько строк, которые имеют одинаковую минимальную цену. Это может быть или не быть тем, что вы хотите, вместо произвольного выбора среди совпадающих записей.

3 голосов
/ 24 ноября 2011

Я делаю это так:

SELECT t1.id, t1.name, t1.price
FROM sampleTable AS t1
LEFT OUTER JOIN sampleTable AS t2
  ON t1.price > t2.price
WHERE t2.id IS NULL

Другими словами, ищите строку t2, которая имеет более низкую цену, чем строка t1. Если такая строка t2 не найдена, внешнее объединение составляет t2. * NULL, а когда это так, то t1 должна иметь минимальную цену.

Это называется исключающее соединение , и оно обычно работает лучше, чем подзапрос в MySQL.

3 голосов
/ 24 ноября 2011

Для этого запроса вам не нужно MIN, но вы можете использовать ORDER BY и LIMIT

SELECT id, name, price
FROM Table
ORDER BY Price ASC
LIMIT 1
1 голос
/ 24 ноября 2011

Сделай это;

SELECT id, name, price FROM table order by price ASC LIMIT 1

Надеюсь, это поможет

0 голосов
/ 06 февраля 2019

Эффективный способ (с любым количеством записей): -

SELECT id, name, MIN(price) FROM (select * from table order by price) as t group by id

Я испробовал много решений: используя join, subquery. Они все хороши, но отнимают больше времени.

Но этот сказочный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...