在mySql中从具有不同条件的表中计数元素?

时间:2018-12-12 16:27:40

标签: mysql

我要计算用户拥有的所有订单以及用户拥有的所有完整订单。我是用这个来的,但是没用

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');

有什么主意吗?

2 个答案:

答案 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