我要计算用户拥有的所有订单以及用户拥有的所有完整订单。我是用这个来的,但是没用
select
count(a.id) as total,
count(b.id) as complete
from
user
join
orders a on user.id = a.user_id
join
orders b on user.id = b.user_id
where
a.id = 1
and
(b.id = 1 and b.complete = 'yes');
有什么主意吗?
答案 0 :(得分:1)
您可以使用yes对订单求和,并按用户计数不同的id组
select user.id, sum(if(a.complete ='yes',1,0)), count(distinct a.id)
from user
INNER join orders a on user.id = a.user_id
group by user.id
答案 1 :(得分:1)
我相信您正在按不同用户搜索分组(MySQL GROUP BY),然后计算与每个用户相关的所有订单以及已完成的订单。对于这种方法,您将需要:
(1)与用户一起订购。
(2)使用GROUP BY
列上的user.id
子句。
(3)用COUNT()
(4)用SUM(CASE WHEN <specific_condition> THEN 1 ELSE 0 END)
将与每个用户有关的所有订单具有特定条件。
总而言之,类似下一个查询的查询应该起作用:
SELECT
u.id,
COUNT(o.id) AS total_orders,
SUM(CASE WHEN o.complete = "yes" THEN 1 ELSE 0 END) AS complete_orders
FROM
user AS u
INNER JOIN
orders AS o ON o.user_id = u.id
GROUP BY
u.id