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这样的东西*