У меня есть стол table1
pid_x | pid_y | count
-------|-------|-------
a | b | 5
a | c | 10
b | a | 20
c | e | 3
d | g | 7
e | f | 10
e | b | 20
и так далее (более 1 миллиона строк)
Также у меня есть master_table
который состоит из деталей
master_id | pid | rating_pid | price_pid
-----------|-----|------------|-----------
a | a1 | 2 | 10
a | b1 | 4 | 20
a | c1 | 1 | 30
b | d1 | 3.5 | 40
b | e1 | 2.4 | 50
c | f1 | 1.5 | 60
d | g1 | 3.8 | 70
(и так далее, огромный стол master_table
)
вы можете увидеть в table1, pid_x и pid_y имеют некоторые значения, которые на самом деле master_id (от master_table), и я хочу заменить master_id на самый дешевый «pid» для этого master_id
в pid_x и pid_y
То, что я ищу, это final_table
который имеет столбцы
pid_x pid_y count price_pid_y rating_pid_y price_diff_pidy/x
Объяснение.
создайте окончательную таблицу, которая имеет столбцы pid_x
и pid_y
после замены значений master_id на самый дешевый pid из master_table, а затем присоедините price and rating
pid_y изmaster_table's
pid
, а также процент разницы в цене pid_y по отношению к pid_x.
final_table
должно выглядеть примерно так
pid_x | pid_y | count | price_pid_y | rating_pid_y | price_diff_pid_y/x
-------|-------|-------|-------------|--------------|--------------------
a1 | d1 | 5 | 40 | 3.5 | 400
a1 | f1 | 10 | 60 | 1.5 | 600
d1 | a1 | 20 | 10 | 2 | 25
У меня есть частичное решение, которое дает мне результат,
я просто хочу добавить это условие»всякий раз, когда в table1 pid_x и pid_y есть значения, которые из master_id заменяют его самым дешевым pid из master_table».
SELECT
t1.pid_x
,t1.pid_y
,t1.count
,m1.price_pid AS price_pid_y
,m1.rating_pid AS rating_pid_y
,100 * m1.price_pid / m2.price_pid AS price_diff_pid_y_x
FROM table1 t1
INNER JOIN master_table m1 ON t1.pid_y = m1.pid
INNER JOIN master_table m2 ON t1.pid_x = m2.pid
ORDER BY
t1.pid_x
,t1.pid_y
Давая какой-то случай, как
INNER JOIN master_table m1
ON CASE WHEN A.pid_x = B.master_id
затем замените этот pid_x самым дешевым pid dor, который mater_id……`
Хорошо, я думаю, что я понимаю, поэтому я собираюсь сделать этот шаг за шагом, так что вы можете узнать, как это сделать и исправить пятна, которые я не понял.
Во-первых, вы хотите «самые дешевые цены», когда вы смотрите вещи на главном столе. Давайте сделаем запрос, чтобы получить только эту таблицу.
Сначала мы получаем уникальный идентификатор для этой строки:
Затем мы можем выбрать ту новую таблицу, которая имеет только один 1, который является самым дешевым:
Теперь я бы создал это как представление, подобное этому:
С этим новым представлением ваш запрос очень близок, здесь он исправлен: