Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Минимальная цена с учетом курса / 16 сообщений из 16, страница 1 из 1
29.11.2020, 23:18
    #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
29.11.2020, 23:35
    #40023219
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальная цена с учетом курса
Выложите CREATE TABLE обеих таблиц, пример данных (в виде INSERT INTO, 3-5 записей) и требуемый результат для этих данных.
...
Рейтинг: 0 / 0
29.11.2020, 23:45
    #40023221
Airexe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальная цена с учетом курса
Мне просто неоходимо извлеч минимальное значение цены с учетом курса валют product_price.curency.id => currency.id.
В таблице product_price цена может быть как в евро так и в рублях, соот-во мин значение будет некорректное (ибо на выходе всегда должен быть пересчет на рубли и рейт должен быть взят из таблицы currency)
...
Рейтинг: 0 / 0
30.11.2020, 01:59
    #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
30.11.2020, 07:01
    #40023239
Airexe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальная цена с учетом курса
Нужнен вариант б), у каждой цены только одна валюта (к примеру есть три цены (три товара) каждая цена/товар в своей валюте EURO, USD, RUB) нужно получить минимальную цену в пересчете на рубли
...
Рейтинг: 0 / 0
30.11.2020, 07:52
    #40023242
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальная цена с учетом курса
Airexe , слушайте... ну вот у Вас проблема... и её надо решить... с Вас просят данные... ну почему надо их делать на "на и отъебись"? Сырой дамп, нечищенный, с кучей нафиг не нужных для задачи полей, и абсолютно без тех сочетаний, которые составляют суть проблемы. Три продукта, и все разные - ну какие С ЭТИМИ ДАННЫМИ могут быть сложности по извлечению цены, если для каждого продукта она - единственная?

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

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

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

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

Автору:

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

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

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

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

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

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

Автору:

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

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



Так и не нужно чтобы вы за меня делали саму задачу, мне не понятна концепция MIN, MAX и ее работа с подзапросом, если знаете разъяните, иначе какой смысл был просто комментировать неправильно поставленный вопрос.
...
Рейтинг: 0 / 0
30.11.2020, 09:50
    #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
30.11.2020, 10:23
    #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
30.11.2020, 10:30
    #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
30.11.2020, 10:38
    #40023269
Airexe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальная цена с учетом курса
Akina, Поэтому и пытался приводить примеры про товары без детального sql ), но в общем все довольно просто, в каталоге есть товары от разных производителей, в разных исходных валютах (валютах поставщика), конечному пользователю они показываются в рублях, и нужно вывести мин и макс значения цены с учетом конвертации (для фильтра по цене).
...
Рейтинг: 0 / 0
30.11.2020, 11:17
    #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
30.11.2020, 11:24
    #40023280
Airexe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимальная цена с учетом курса
Akina, мощно ! спасибо, буду изучать )
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Минимальная цена с учетом курса / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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