powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите избавится от GROUP BY
9 сообщений из 9, страница 1 из 1
Помогите избавится от GROUP BY
    #40074635
game_Racer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня.
Есть две таблицы. Артикулы и предложения по ним. Задача выгрузить артикулы с данными о предложении с минимальной ценой.
С помощью гугла и небольшого опыта был составлен запрос который работает, но только без ONLY_FULL_GROUP_BY :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT art.id, art.article, cpl.price, cpl.quantity, cpl.min_part, cpl.delivery_period
FROM `articles` art
JOIN (
	SELECT cpl1.id_article, cpl1.price, cpl1.quantity, cpl1.min_part, cpl1.delivery_period FROM `content_price_list` cpl1
	LEFT OUTER JOIN content_price_list cpl2 on cpl1.id_article = cpl2.id_article AND cpl1.price > cpl2.price
	where cpl2.price is null and cpl1.id_price_list IN (1,2,3) 
) cpl on cpl.id_article = art.id
GROUP BY id


На каждый артикул выдается несколько предложений с минимальной ценой. Использовал GROUP BY id чтобы оставить только одно предложение. Я понимаю, что это не правильно, но как сделать правильно, не хватает опыта. Если это возможно, подскажите. Запрос используется для выгрузки данных, поэтому без лимитов.
...
Рейтинг: 0 / 0
Помогите избавится от GROUP BY
    #40074689
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
game_Racer
Есть две таблицы. Артикулы и предложения по ним. Задача выгрузить артикулы с данными о предложении с минимальной ценой.
Выкладывайте структуры таблиц (CREATE TABLE, ненужные поля поскипать), пример данных (INSERT INTO, с десяток записей), требуемый ответ для именно этих данных с пояснениями.

И укажите точную версию MySQL.
...
Рейтинг: 0 / 0
Помогите избавится от GROUP BY
    #40074722
game_Racer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

http://sqlfiddle.com/#!9/6e85e4/2 Версия сервера: 5.5.60-MariaDB

Полученный результат устраивает, не устраивает запрос.
...
Рейтинг: 0 / 0
Помогите избавится от GROUP BY
    #40074757
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT articles.*, content_price_list.*
FROM articles
JOIN ( SELECT id_article, 
              MIN(price) min_price
              FROM content_price_list
              GROUP BY id_article ) min_prices ON articles.id = min_prices.id_article
JOIN content_price_list  ON min_prices.id_article = content_price_list.id_article
                        AND min_prices.min_price = content_price_list.price
ORDER BY articles.id


https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=21a8e6aec49b06e6305dc44f3a0c973d

А что делать в случае, когда в двух разных предложениях одна и та же, причём минимальная, цена - решай самостоятельно.

game_Racer
Полученный результат устраивает

А вот это плохо. Как раз по причине возможности того, что тебе предстоит разруливать самостоятельно.
...
Рейтинг: 0 / 0
Помогите избавится от GROUP BY
    #40074904
game_Racer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaА что делать в случае, когда в двух разных предложениях одна и та же, причём минимальная, цена - решай самостоятельно.
С твоим запросом такие случаи есть, а с моим нет.
...
Рейтинг: 0 / 0
Помогите избавится от GROUP BY
    #40074933
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
game_Racer
С твоим запросом такие случаи есть, а с моим нет.
Мой запрос детерминированный. Твой - нет. Из "дублей" он возвращает только один, причём неизвестно какой из. Как левая пятка захочет. Сейчас даст один, а через минуту при повторном выполнении запроса может дать другой - и будет при этом в своём праве. А если тебе всё равно - так, может, тебе вообще эти данные не так уж и нужны, а?

Нет, если хочется писать "кривые" запросы - да пожалуйста, мне-то что с того...
...
Рейтинг: 0 / 0
Помогите избавится от GROUP BY
    #40074980
game_Racer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Все верно, мне без разницы, какой из дублей. Главное условие с минимальной ценой и без дублей. Спасибо за попытку помочь. Будем считать эту задачу невыполнимой.
...
Рейтинг: 0 / 0
Помогите избавится от GROUP BY
    #40075008
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
game_Racer
мне без разницы, какой из дублей.
А сказать?

На Вашей древней версии - походу проще всего сделать это на переменных.
...
Рейтинг: 0 / 0
Помогите избавится от GROUP BY
    #40075014
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
SELECT aid, 
       article, 
       cid, 
       id_article, 
       price, 
       quantity, 
       min_part, 
       delivery_period, 
       id_price_list
FROM ( SELECT *, 
              id_article != @id_article is_first,
              @id_article := id_article
       FROM ( SELECT ar.id aid, 
                     ar.article, 
                     co.id cid, 
                     co.id_article, 
                     co.price, 
                     co.quantity, 
                     co.min_part, 
                     co.delivery_period, 
                     co.id_price_list
              FROM articles ar
              JOIN content_price_list co ON ar.id = co.id_article ) total
       CROSS JOIN ( SELECT @id_article:=0 ) init_variables
       ORDER BY total.id_article, total.price DESC ) final
WHERE is_first


https://dbfiddle.uk/?rdbms=mysql_5.5&fiddle=e54d8b8be4de248857945c8e04e53cd1
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите избавится от GROUP BY
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]