Mysql 如何使用两个不同表中的列创建SQL对象?

Mysql 如何使用两个不同表中的列创建SQL对象?,mysql,sql,Mysql,Sql,我有一个“订单”表和一个“记录”表 订单表包含以下列: order_id order_date seller order_price order_id record_created_at record_log 记录表包含以下列: order_id order_date seller order_price order_id record_create

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

订单表包含以下列:

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_approved_rate_sum”,即已批准订单数量与已下订单数量的比率

我目前的查询是:

SELECT seller
     , o.order_id
     , COUNT(DISTINCT o.order_id) AS approved
  FROM records r
     , orders o
 WHERE l.order_id IN (
SELECT order_id
    FROM records
    WHERE record_log = 'approved')
 GROUP 
    BY merchant_name
;
我试图从获取已批准订单的总数开始,但此查询获取的数字错误

我做错了什么?

试试下面的方法-

SELECT seller, COUNT(DISTINCT o.order_id) AS approved 
FROM records r inner join orders o 
on r.order_id=o.order_id
where record_log = 'approved'
GROUP BY seller
试试下面的方法-

SELECT seller, COUNT(DISTINCT o.order_id) AS approved 
FROM records r inner join orders o 
on r.order_id=o.order_id
where record_log = 'approved'
GROUP BY seller

首先,如果坚持以这种方式进行查询而不是使用内部联接,则需要记住在WHERE子句中包含o.order\u id=r.order\u id。否则,应使用内部联接语法

其次,GROUPBY子句应该包括SELECT子句中不属于聚合的所有字段。我想当你说商人的名字时,你指的是卖家。因此,在您的查询中,GROUP BY应该是 按卖方分组,o.order\U id

第三,将order_id作为字段和聚合将分别给出每个order_id的计数,每次很可能是1

下面是一些与您所做工作相近的工作:

SELECT o.seller AS merchant,
      COUNT(DISTINCT o.order_is) AS approved
FROM records r, orders o
WHERE r.order_id = o.order_id
AND
o.order_id IN (SELECT order_id FROM records WHERE record_log='approved')
GROUP BY o.seller
但是,最好是:

SELECT o.seller AS merchant,
       COUNT(DISTINCT o.order_id) AS approved
FROM records r INNER JOIN orders o
ON r.order_id=o.order_id
WHERE r.record_log = 'approved'
GROUP BY o.seller;

首先,如果坚持以这种方式进行查询而不是使用内部联接,则需要记住在WHERE子句中包含o.order\u id=r.order\u id。否则,应使用内部联接语法

其次,GROUPBY子句应该包括SELECT子句中不属于聚合的所有字段。我想当你说商人的名字时,你指的是卖家。因此,在您的查询中,GROUP BY应该是 按卖方分组,o.order\U id

第三,将order_id作为字段和聚合将分别给出每个order_id的计数,每次很可能是1

下面是一些与您所做工作相近的工作:

SELECT o.seller AS merchant,
      COUNT(DISTINCT o.order_is) AS approved
FROM records r, orders o
WHERE r.order_id = o.order_id
AND
o.order_id IN (SELECT order_id FROM records WHERE record_log='approved')
GROUP BY o.seller
但是,最好是:

SELECT o.seller AS merchant,
       COUNT(DISTINCT o.order_id) AS approved
FROM records r INNER JOIN orders o
ON r.order_id=o.order_id
WHERE r.record_log = 'approved'
GROUP BY o.seller;

如果您试图获得卖家的批准率,那么您的查询可能如下所示

    with cte1 as
    (select o.seller, count(distinct o.order_id) as approved_orders
    from orders o
    join records r
        on r.order_id = o.order_id
    where r.record_log = 'approved'
    group by o.seller
    ), 
    cte2 as
    (
    select o.seller, count(distinct o.order_id) as all_orders
    from orders o
    join records r
        on r.order_id = o.order_id
    group by o.seller
    )
    select cte2.seller, coalesce((cte1.approved_orders / cte2.all_orders),0) as approval_rate
    from cte2
    left join cte1
        on cte1.seller = cte2.seller

如果您试图获得卖家的批准率,那么您的查询可能如下所示

    with cte1 as
    (select o.seller, count(distinct o.order_id) as approved_orders
    from orders o
    join records r
        on r.order_id = o.order_id
    where r.record_log = 'approved'
    group by o.seller
    ), 
    cte2 as
    (
    select o.seller, count(distinct o.order_id) as all_orders
    from orders o
    join records r
        on r.order_id = o.order_id
    group by o.seller
    )
    select cte2.seller, coalesce((cte1.approved_orders / cte2.all_orders),0) as approval_rate
    from cte2
    left join cte1
        on cte1.seller = cte2.seller

为什么示例查询引用的是
商户名称
,它不在任何表中?为什么示例查询引用的是
商户名称
,它不在任何表中?