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
为什么示例查询引用的是
商户名称
,它不在任何表中?为什么示例查询引用的是商户名称
,它不在任何表中?