2017-02-07 3 views
2

Я пытаюсь найти дубликаты и выбрать результат с наименьшей комбинацией значений в таблице.MySQL Выберите дубликаты с условием LEAST

До сих пор я могу только выбрать результат, который имеет самое низкое значение в столбце, используя MIN(). Я думал, что будет легко просто заменить MIN на LEAST и изменить столбцы.

Вот макет:

CREATE TABLE `index`.`products` (`id` INT NOT NULL AUTO_INCREMENT , `name` VARCHAR(10) NOT NULL , `price` INT NOT NULL , `availability` INT NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB; 

INSERT INTO `products` (`id`, `name`, `price`, `availability`) VALUES 
(NULL, 'teste', '10', '1'), 
(NULL, 'teste', '5', '2'), 
(NULL, 'teste', '3', '3'); 

упрощенный макет

id - name - price - availabilty 
1 - test - 10 - 1 
2 - test - 5 - 2 
3 - test - 3 - 3 

с помощью следующего запроса:

select name, MIN(price) from products group by name having count(*) > 1 

получает мне самую низкую цену. Я пытаюсь получить самую низкую цену и самую низкую доступность.

select name, LEAST(price, availability) from products group by name having count(*) > 1 

Это не работает.

Уточнение: я хочу выбрать строку с самой низкой ценой и самой низкой доступностью. В этом случае это должно быть первое, что я предполагаю.

я clarifity, что 1 = да, 2 = нет и 3 = скоро

+0

Смотреть Http: // мета. stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query – Strawberry

+1

Кто упрекает этот материал? – Strawberry

+0

Почему первый? Цена составляет 10 ... –

ответ

0

Заявления, чтобы выбрать самую низкую цену на лучшую доступность:

set sql_mode=only_full_group_by; 
SELECT 
    name, MIN(price), availability 
FROM 
    products 
JOIN 
    (
     SELECT 
      name, MIN(availability) availability 
     FROM 
      products 
     GROUP BY name 
    ) as x 
USING (name , availability) 
GROUP BY name , availability; 
+0

Дубликат - это столбец имен. Все 3 строки имеют одинаковое имя. – xnny

+0

Я получаю ту же ошибку, что и в предыдущем ответе: # 1055 - Выражение # 1 списка SELECT не находится в предложении GROUP BY и содержит неагрегированный столбец 'index.products.id', который функционально не зависит от столбцов в предложении GROUP BY ; это несовместимо с sql_mode = only_full_group_by – xnny

+0

Хорошо! Почти готово. Это работает, если я удалю идентификатор из третьего SELECT. В противном случае это дает мне ту же ошибку. Думаю, теперь я смогу работать с этим. Но как вы думаете, возможно, что там есть идентификатор? – xnny

Смежные вопросы