如何解析“ where子句”中的“未知”列

时间:2019-01-06 16:06:41

标签: mysql sql

我有很多子句时,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

您有什么建议吗?

1 个答案:

答案 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