Mysql自联接数据

时间:2016-09-15 07:47:11

标签: mysql self-join

我有一张桌子

distributor_id | product_id | price
1              | 1          | 10.00
1              | 2          | 11.00
1              | 3          | 12.00
1              | 1          | 14.00
4              | 1          | 9.00
4              | 2          | 32.00
4              | 5          | 17.00

我想比较分销商的产品价格,即我希望获得如下输出:

distributor1|distributor2|product_id|distributor1_price|distributor2_price
1           | 4          | 1        |12.00             |9.00
1           | 4          | 2        |11.00             |32.00
1           | 4          | 3        |12.00             |null

distributor1_price,distributor2_price将是product_id的平均价格。 product_id应该是distributor1的所有产品。如果distributor2没有该产品,那么应该为null。

我尝试过自我加入而没有任何成功。 感谢。

1 个答案:

答案 0 :(得分:1)

尚未测试,但我认为这应该有效:

SELECT a.distributor_id
    ,b.distributor_id
    ,a.product_id
    ,AVG(a.price)
    ,AVG(b.price)
FROM mytable AS a
LEFT JOIN mytable AS b ON a.product_id = b.product_id
GROUP BY a.product_id