2013-09-02 2 views
0

Борьба за решение с помощью mysql.Присоединиться к тому, где одна строка должна быть дублирована

Упрощенная настройка:

две таблицы:

 
Table A 
id | value | price 
1 | 2  | 5.95 
2 | 5  | 7.95 
3 | 30 | 8.95 
 
Table B: 
color | min_value | max_value 
green |  1  | 3 
blue |  3  | 10 
red | 10  | 35 
orange | 25  | 50 

на основе определений из таблицы B, я хотел бы присоединиться к колонке цвета на данных из таблицы А. Мне нужно знайте в этом примере среднюю цену, связанную со всеми элементами таблицы А по цвету. Однако определения могут быть перекрывающимися (т. Е. Id 3 как красный, так и оранжевый).

Я знаю, что могу использовать python (в случае этого проекта), чтобы рекурсивно пройти через каждый цвет и вытащить соответствующие значения, а затем среднюю цену, но я бы хотел упростить это, выполнив это mysql.

Благодарим за помощь/руководство!

+0

Итак, как это следует учитывать, если что-то имеет несколько цветов? Для каждого цвета один раз? Или только «1/n» для каждого из n совпадающих цветов? –

+0

Один для каждого. Таким образом, id # 3 будет существовать в обеих группах для красного и оранжевого. – dgfin

ответ

2

Вам не нужно делать ничего особенного, случай по умолчанию в SQL заключается в том, что если одна строка из таблицы соответствует двум строкам в другой, вы получите две строки в результате.

SELECT color, avg(price) 
    FROM A, B 
WHERE A.value BETWEEN B.min_value AND B.max_value 
GROUP BY color 
+0

Спасибо. Я думаю, что у меня были некоторые лишние группы, которые вызывали проблемы, и я предположил, что это просто не дает мне несколько строк, которые мне нужны. – dgfin

Смежные вопросы