尝试通过从两个表中提取数据并不断获取“错误:每个派生表必须具有自己的别名”来创建新表

问题描述

我有一个“订单”表和一个“记录”表。

“订单”表具有以下列:

order_id       order_date        seller        order_price

“记录”表具有以下列:

order_id        record_created_at         record_log

我正在尝试提取并编译以下数据列表,但始终收到错误消息:

order_week
seller
total_num_orders
under100_count --this is the number of orders that were < $100
over100_count --this is the number of order that >= $100
approved --this is the number of orders that were approved by the payment platform

这是我的查询

SELECT order_week,seller,total_num_orders,under100_count,over100_count,approved
FROM (

    SELECT 
        EXTRACT(WEEK FROM order_created_at) AS order_week,merchant_name AS seller,COUNT(merchant_name) AS total_num_orders,SUM(disTINCT total_order_price < 100) AS under100_count,SUM(disTINCT total_order_price >= 100) AS over100_count
    FROM orders o
    GROUP BY order_week,seller)

INNER JOIN (

    SELECT
        COUNT(disTINCT o.order_id) AS approved
    FROM records r
    WHERE record_log = 'order approved'
    GROUP BY order_id)

ON l.order_id = o.order_id;

我在做什么错了?

解决方法

Qtest(rbind(g1,g2,g3)) 中的子查询需要一个别名。它还需要返回join列,以便可以将其加入。

order_id

我实际上将您的查询写为:

inner join ( select order_id,... from records ... group by order_id) r  --> here
on l.order_id = o.order_id

理论上:

  • 您不需要,不需要select extract(week from o.order_created_at) as order_week,o.merchant_name as seller,count(*) as total_num_orders,sum(o.total_order_price < 100) as under100_count,sum(o.total_order_price >= 100) as over100_count,sum(r.approved) approved from orders o inner join ( select order_id,count(*) approved from records r where record_log = 'order approved' group by order_id ) r on r.order_id = o.order_id; group by order_week,seller,approved 在此处的聚合函数中;它效率低下,甚至可能产生错误的结果

  • distinct效率更高count(*)-因此,除非您知道为什么要这样做,否则请使用它

  • 我删除了不必要的嵌套

如果有没有记录的订单,则可能需要count(<expression>)