问题描述
“订单”表具有以下列:
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>)
。