我有很多子句时,SQL在选择相同的信息时遇到问题 第一列在其他子句中是未知的。
这是我的sql表达式:
(select sum(sell) as wsell FROM (select sell from product_details where product_details.product_id = products.id order by product_details.id desc limit 2 ) as weeksell) as wsell
我尝试从产品中获取信息,第二个表是product_details 根据产品ID;
卖出=最后卖出
总=总销售量
wsell =通过使用sum()限制7个卖出,然后从最后7个中选择
但是当我运行我的表达式时,我会出错
null
在此行不知道
null
您有什么建议吗?
答案 0 :(得分:1)
您的问题是相关子句的嵌套深度不能超过一层-因此,看不到products
的原因。一种解决方案是将其转换为条件聚合。有点棘手,但这是一种方法:
SELECT p.* ,
sum(pd.sell) as total,
max(case when pd.id = pdd.max_id then pd.sell end) as ysell,
sum(case when pd.id >= pdd.id7 then pd.sell end) as wsell
FROM products p JOIN
product_details pd
ON pd.product_id = p.id JOIN
(SELECT pd.product_id, MAX(pd.id) as max_id,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(pd.id ORDER BY pd.id DESC), ',', 7), ',', -1) as id7
FROM product_details pd
GROUP BY pd.product_id
) pdd
ON pdd.product_id = p.id
GROUP BY p.id; -- reasonable assuming `id` is unique/primary key