SQL - упорядочить по группам - PullRequest
0 голосов
/ 01 мая 2018

Я хотел бы показать товары по самой низкой цене, а затем группировать их по алфавиту.

У меня есть картинка ниже, чтобы лучше всего описать то, что я ищу:

enter image description here

Ответы [ 4 ]

0 голосов
/ 03 мая 2018

Попробуйте это

ВЫБРАТЬ * ИЗ (table name) ГРУППА ПО ПУНКТУ, цена, модель, цвет, магазин ЗАКАЗАТЬ ПО ПУНКТУ, цена, модель, цвет, магазин АСК

0 голосов
/ 01 мая 2018

Попробуйте присоединиться к подзапросу, который находит запись с самой низкой ценой для каждого элемента:

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT Item, MIN(Price) AS min_price
    FROM yourTable
    GROUP BY Item
) t2
    ON t1.Item = t2.Item AND
       t1.Price = t2.min_price
ORDER BY
    t1.Item;
0 голосов
/ 01 мая 2018

Я бы использовал коррелированный подзапрос:

select t.*
from t
where t.price = (select min(t2.price) from t t2 where t2.item = t.item)
order by t.item;

Для производительности вам нужен индекс на (item, price).

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

select t.*
from t
where t.id = (select t2.id
              from t t2
              where t2.item = t.item
              order by t2.price desc
              limit 1
             )
order by t.item;
0 голосов
/ 01 мая 2018

Вы можете использовать subquery:

select * 
from table t
where price = (select min(price) from table where Item = t.Item)
order by Item;

Однако будьте осторожны, пока один и тот же предмет имеет два одинаковых мин цена

EDIT:

Вы можете изменить предложение where и использовать limit предложение

select * 
from table t
where id = (select id
            from table 
            where Item = t.Item
            order by price desc
            LIMIT 1)
order by Item;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...