Mysql 试图通过从两个表中提取数据来创建新表,并在此查询中不断获取“错误:每个派生表都必须有自己的别名”
我有一个“订单”表和一个“记录”表 订单表包含以下列:Mysql 试图通过从两个表中提取数据来创建新表,并在此查询中不断获取“错误:每个派生表都必须有自己的别名”,mysql,sql,join,count,subquery,Mysql,Sql,Join,Count,Subquery,我有一个“订单”表和一个“记录”表 订单表包含以下列: order_id order_date seller order_price order_id record_created_at record_log 记录表包含以下列: order_id order_date seller order_price order_id record_created_at
order_id order_date seller order_price
order_id record_created_at record_log
记录表包含以下列:
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;
我做错了什么?联接中的子查询需要别名。它还需要返回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
理由:
您不希望,也不需要,在这里的聚合函数中是不同的;它效率低下,甚至可能产生错误的结果
count*是一种更有效的计数方法,所以,除非你知道为什么要这样做,否则就使用它吧
我移除了不必要的嵌套级别
如果有没有记录的订单,您可能需要左联接。您的子查询没有返回联接键。@GordonLinoff如何解决此问题?示例数据和所需结果将非常有用。所需结果如我所列:订单周、卖家、订单总数、,under100_count-这是订单数<100美元,超过100_count-这是订单数>=$100,approvedColumn标题不是示例数据。@GandalfTheWat:我重新阅读了我的答案:子查询解决方案不是有效的standardSQL尽管MySQL可能会接受它,但我删除了它。我还稍微更改了第一个查询。如何获得已批准订单占订单总数的比例?我可以想象像COUNTraw\u log='order approved'/COUNT这样的东西*