Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 一对多父子关系:按子列分组、聚合父列_Mysql_Sql - Fatal编程技术网

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

Mysql 一对多父子关系:按子列分组、聚合父列,mysql,sql,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) ) 对于购物车购买中的每一行,您将在产品购买中获得多行。如何构造一个查询来回答以下问题:每个产品的平均

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

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

create table product_purchase (
    id int,
    shopping_cart int,
    product varchar(100)
)
对于购物车购买中的每一行,您将在产品购买中获得多行。如何构造一个查询来回答以下问题:每个产品的平均购物车总数是多少?显而易见的事情是行不通的:

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

因为父行将与子行相乘,从而偏离平均值。关于如何做到这一点有什么想法吗?

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

除非您需要平均产品成本/每辆购物车,在这种情况下,您可以使用类似的方法

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

抱歉,我想在我的非工作查询中包含group by。不幸的是,Group by并不能解决这个问题。您可以sqlfiddle.com您的数据吗?我不知道你说的父行和子行是什么意思。也许你对数据的预期输出是多少。你需要除以每个购物车中的产品数量吗?我更新了答案,显示了平均产品成本/每辆购物车。看看这是否是你想要的。也许使用子查询?