加入应该重复一行的位置

时间:2013-09-02 22:04:36

标签: mysql join

努力想出一个只有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中的定义,我想将颜色列加到表A中的数据上。在这个例子中,我需要知道与表A中所有项目相关的平均价格。然而,定义可以重叠(即,id 3是红色和橙色)。

我知道我可以使用python(在这个项目的情况下)递归遍历每种颜色并提取匹配的值然后平均价格,但我希望通过做mysql来简化它。

感谢您提供任何帮助/指导!

1 个答案:

答案 0 :(得分:2)

您不需要做任何特殊操作,SQL中的默认情况是,如果表中的一行与另一行中的两行匹配,则结果中将得到两行。

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