Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите избавится от GROUP BY / 9 сообщений из 9, страница 1 из 1
01.06.2021, 10:57
    #40074635
game_Racer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите избавится от GROUP BY
Всем доброго дня.
Есть две таблицы. Артикулы и предложения по ним. Задача выгрузить артикулы с данными о предложении с минимальной ценой.
С помощью гугла и небольшого опыта был составлен запрос который работает, но только без 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
01.06.2021, 13:09
    #40074689
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите избавится от GROUP BY
game_Racer
Есть две таблицы. Артикулы и предложения по ним. Задача выгрузить артикулы с данными о предложении с минимальной ценой.
Выкладывайте структуры таблиц (CREATE TABLE, ненужные поля поскипать), пример данных (INSERT INTO, с десяток записей), требуемый ответ для именно этих данных с пояснениями.

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

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

Полученный результат устраивает, не устраивает запрос.
...
Рейтинг: 0 / 0
01.06.2021, 16:02
    #40074757
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите избавится от GROUP BY
Код: 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
01.06.2021, 23:11
    #40074904
game_Racer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите избавится от GROUP BY
AkinaА что делать в случае, когда в двух разных предложениях одна и та же, причём минимальная, цена - решай самостоятельно.
С твоим запросом такие случаи есть, а с моим нет.
...
Рейтинг: 0 / 0
02.06.2021, 07:38
    #40074933
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите избавится от GROUP BY
game_Racer
С твоим запросом такие случаи есть, а с моим нет.
Мой запрос детерминированный. Твой - нет. Из "дублей" он возвращает только один, причём неизвестно какой из. Как левая пятка захочет. Сейчас даст один, а через минуту при повторном выполнении запроса может дать другой - и будет при этом в своём праве. А если тебе всё равно - так, может, тебе вообще эти данные не так уж и нужны, а?

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

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

На Вашей древней версии - походу проще всего сделать это на переменных.
...
Рейтинг: 0 / 0
02.06.2021, 13:03
    #40075014
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите избавится от GROUP BY
Код: 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
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите избавится от GROUP BY / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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