一对多父子关系:按子列分组,聚合父列

时间:2014-01-02 16:23:18

标签: mysql sql

假设您有以下两个用于记录购买的表:

create table shopping_cart (
    id int,
    total float,
    purchase_date datetime
)

create table product_purchase (
    id int,
    shopping_cart int,
    product varchar(100)
)

对于cart_purchases中的每一行,您将在product_purchases中获得多行。如何构建一个查询来回答问题:对于每个产品,平均购物车总数是多少?显而易见的事情不起作用:

select pp.product, avg(cart.total) from shopping_cart cart 
inner join product_purchase pp on cart.id = pp.shopping_cart
group by pp.product

因为父行将乘以子行,抛弃平均值。关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:0)

我认为您无法在查询级别解决此问题。我认为您需要将产品放入购物车 - 即更改数据模型。

答案 1 :(得分:0)

除非您想要平均产品成本/每辆车,否则您可以使用此类

SELECT p2.product,avg(avg_product_cost) as avg
 FROM
   (SELECT s.id,s.total/count(p.id) as avg_product_cost
    FROM shopping_cart s INNER JOIN product_purchase p ON (p.shopping_cart = s.id)
    GROUP BY s.id,s.total
   )t1
INNER JOIN
product_purchase p2 ON (p2.shopping_cart = t1.id)
GROUP BY p2.product