powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Минимальная цена с учетом курса
16 сообщений из 16, страница 1 из 1
Минимальная цена с учетом курса
    #40023218
Airexe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер, господа мастера SQL подскажите как сделать запрос мин цены товара с учетом курса валюты.

Есть две таблицы product_price (id, product_id, currency_id, price) и currency (id, rate), пытаюсь сделать следующее:

SELECT MIN(product_price.price *
(SELECT currency.rate FROM currency WHERE currency.id = product_price.currency_id)) FROM product_price - но получаю лишь умножение на крайнюю запись из currency ? нужно сделать JOIN в этом подзапросе ?
...
Рейтинг: 0 / 0
Минимальная цена с учетом курса
    #40023219
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выложите CREATE TABLE обеих таблиц, пример данных (в виде INSERT INTO, 3-5 записей) и требуемый результат для этих данных.
...
Рейтинг: 0 / 0
Минимальная цена с учетом курса
    #40023221
Airexe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне просто неоходимо извлеч минимальное значение цены с учетом курса валют product_price.curency.id => currency.id.
В таблице product_price цена может быть как в евро так и в рублях, соот-во мин значение будет некорректное (ибо на выходе всегда должен быть пересчет на рубли и рейт должен быть взят из таблицы currency)
...
Рейтинг: 0 / 0
Минимальная цена с учетом курса
    #40023234
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Airexe
Добрый вечер, господа мастера SQL подскажите как сделать запрос мин цены товара с учетом курса валюты.

Есть две таблицы product_price (id, product_id, currency_id, price) и currency (id, rate), пытаюсь сделать следующее:

SELECT MIN(product_price.price *
(SELECT currency.rate FROM currency WHERE currency.id = product_price.currency_id)) FROM product_price - но получаю лишь умножение на крайнюю запись из currency ? нужно сделать JOIN в этом подзапросе ?


Вы приводите 2 таблицы (не смотрел последний zip) - как понимаю "цена продукта" и "валюта". Получить цену в той или иной валюте можно перемножением, но сам вопрос требует переосмысления:

Минимальная по отношению к чему нужна цена товара? Варианты:

а) найти валюту, в которой цена товара минимальна - то есть нам требуется перемножить цену товара на каждую из валют, сгрупировать по товару и найти миниум.
б) найти товар с минимальной ценой в его валюте. В таком случае надо перемножить цену каждого товара на его валюту, и сгруппировав всё, найти минимальный товар и его цену.
в) в таблице "цены товаров" представлены несколько записей о товаре с РАЗНОЙ ценой (и возможно валютой). Надо найти запись, с минимальной ценой из кучки с учетом валюты. То есть результат опять же группируем по товару, но уже произведение одной цены на его валюту ..

Как видим вопрос группировки - не определен. Итого, что же хочется найти?

Огласите весь список пжалста! :)
...
Рейтинг: 0 / 0
Минимальная цена с учетом курса
    #40023239
Airexe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужнен вариант б), у каждой цены только одна валюта (к примеру есть три цены (три товара) каждая цена/товар в своей валюте EURO, USD, RUB) нужно получить минимальную цену в пересчете на рубли
...
Рейтинг: 0 / 0
Минимальная цена с учетом курса
    #40023242
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Airexe , слушайте... ну вот у Вас проблема... и её надо решить... с Вас просят данные... ну почему надо их делать на "на и отъебись"? Сырой дамп, нечищенный, с кучей нафиг не нужных для задачи полей, и абсолютно без тех сочетаний, которые составляют суть проблемы. Три продукта, и все разные - ну какие С ЭТИМИ ДАННЫМИ могут быть сложности по извлечению цены, если для каждого продукта она - единственная?

Вот fiddle с предоставленными данными - откорректируйте до нормального состояния и выложите ссылку. А также выложите в виде отформатированной таблицы требуемый результат для именно представленных в fiddle данных.
...
Рейтинг: 0 / 0
Минимальная цена с учетом курса
    #40023245
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Мне кажется, очередной начинающий студент, что ни разу не представляет что такое "реляция СУБД" .. даже близко. Надо помогать, кмк.

А то вот на старости лет дали изучать Go (хуже говна не видел, но ладно, это из иной оперы, промолчу) .. задал на киберфоруме несколько простых (ибо тоже нифига не вьехал поначалу) вопросов - тишина. Спросил что так грустно - попер срач .. выложил свою первую поделку .. да фигу кто даже посмотрел. Может позже .. вышел из темы ибо сам уже разобрался.

Я это к чему? (старею видимо) .. к тому, что такой ответ мне там - ни разу не "популязирует язык". Мои непонятки и недовольство как новичка - очевидны.. с этим чудом усиленно общаюсь всего 6-й день.. три примерных программки на разные темки. Освою, куда я денусь! Но .. вот туда спрашивать - точно уже не пойду.

Автору:

Вариант "б" - самый простой. Джойните обе таблицы по ключам и считайте произведение. Там же в селекте ищите его миниум. Правильно будет явное задание группировки, хотя мускулю она тут и не нужна. Но лучше привыкать к хорошему.
Собственно это всё.

Как сделаете - публикуйте. А вот делать за Вас - увольте. :)
...
Рейтинг: 0 / 0
Минимальная цена с учетом курса
    #40023246
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
. дубль
...
Рейтинг: 0 / 0
Минимальная цена с учетом курса
    #40023247
Airexe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, Извеняюсь я только учусь, и не всегда понимаю как правильно вопрос поставить, не взыщите ). Отредактировал fiddle
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=cfd525c412b8c974887b1f5a6ac4ffbf

Для точности добавил три одинаковые цены, но в разной валюте (повторюсь нужен MIN в пересчете на rate из таблицы currency)
...
Рейтинг: 0 / 0
Минимальная цена с учетом курса
    #40023248
Airexe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhat109
Akina,

Мне кажется, очередной начинающий студент, что ни разу не представляет что такое "реляция СУБД" .. даже близко. Надо помогать, кмк.

А то вот на старости лет дали изучать Go (хуже говна не видел, но ладно, это из иной оперы, промолчу) .. задал на киберфоруме несколько простых (ибо тоже нифига не вьехал поначалу) вопросов - тишина. Спросил что так грустно - попер срач .. выложил свою первую поделку .. да фигу кто даже посмотрел. Может позже .. вышел из темы ибо сам уже разобрался.

Я это к чему? (старею видимо) .. к тому, что такой ответ мне там - ни разу не "популязирует язык". Мои непонятки и недовольство как новичка - очевидны.. с этим чудом усиленно общаюсь всего 6-й день.. три примерных программки на разные темки. Освою, куда я денусь! Но .. вот туда спрашивать - точно уже не пойду.

Автору:

Вариант "б" - самый простой. Джойните обе таблицы по ключам и считайте произведение. Там же в селекте ищите его миниум. Правильно будет явное задание группировки, хотя мускулю она тут и не нужна. Но лучше привыкать к хорошему.
Собственно это всё.

Как сделаете - публикуйте. А вот делать за Вас - увольте. :)



Так и не нужно чтобы вы за меня делали саму задачу, мне не понятна концепция MIN, MAX и ее работа с подзапросом, если знаете разъяните, иначе какой смысл был просто комментировать неправильно поставленный вопрос.
...
Рейтинг: 0 / 0
Минимальная цена с учетом курса
    #40023257
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Airexe,

Код: sql
1.
2.
3.
4.
SELECT MIN(product_price.price *
    (SELECT currency.rate FROM currency WHERE currency.id = product_price.currency_id)
)
FROM product_price



В таком виде, как понимаю, ваш запрос тоже должен работать, т.к. он преобразуется к джойн варианту. Можете проверить в том же fiddle. Спрашивал, поскольку было не понятно что Вы хотите получить на самом деле.
...
Рейтинг: 0 / 0
Минимальная цена с учетом курса
    #40023263
Airexe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhat109
Airexe,

Код: sql
1.
2.
3.
4.
SELECT MIN(product_price.price *
    (SELECT currency.rate FROM currency WHERE currency.id = product_price.currency_id)
)
FROM product_price



В таком виде, как понимаю, ваш запрос тоже должен работать, т.к. он преобразуется к джойн варианту. Можете проверить в том же fiddle. Спрашивал, поскольку было не понятно что Вы хотите получить на самом деле.



Вы правы, в fiddle запрос действительно работает, но у себя я получаю все же неверный результат (вероятно это из типа данных bigint возврщается только числа не менее 100), попробую разобраться, за правильное решение и наводку благодарствую много ! )
...
Рейтинг: 0 / 0
Минимальная цена с учетом курса
    #40023266
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Airexe
Для точности добавил три одинаковые цены, но в разной валюте (повторюсь нужен MIN в пересчете на rate из таблицы currency)
То есть из всех продуктов нужен один, но с минимальной ценой, приведённой к одной и той же валюте? признаться, странная задача...

Код: sql
1.
2.
3.
4.
SELECT pp.product_id, pp.value * cc.rate compatible_rate
FROM product_price pp
JOIN currency cc ON pp.currency_id = cc.id
ORDER BY compatible_rate LIMIT 1


fiddle
...
Рейтинг: 0 / 0
Минимальная цена с учетом курса
    #40023269
Airexe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, Поэтому и пытался приводить примеры про товары без детального sql ), но в общем все довольно просто, в каталоге есть товары от разных производителей, в разных исходных валютах (валютах поставщика), конечному пользователю они показываются в рублях, и нужно вывести мин и макс значения цены с учетом конвертации (для фильтра по цене).
...
Рейтинг: 0 / 0
Минимальная цена с учетом курса
    #40023275
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
WITH cte AS (SELECT pp.id, pp.product_id, pp.currency_id, cc.name currency_name, pp.value,
                    pp.value * cc.rate compatible_rate,
                    ROW_NUMBER() OVER (PARTITION BY pp.product_id
                                       ORDER BY pp.value * cc.rate) rn
             FROM product_price pp
             JOIN currency cc ON pp.currency_id = cc.id)
SELECT id, product_id, currency_name, value, compatible_rate
FROM cte
WHERE rn = 1


fiddle

Это - минимальные. Для вывода максимальных добавьте ещё один ROW_NUMBER(), с обратной сортировкой.
...
Рейтинг: 0 / 0
Минимальная цена с учетом курса
    #40023280
Airexe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, мощно ! спасибо, буду изучать )
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Минимальная цена с учетом курса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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