简体   繁体   English

MySQL-如何在单个查询中计数和求和

[英]MySQL - How to count and sum in a single query

I would like to make a count and a sum on differents values in a single query. 我想在单个查询中对差值进行计数和求和。 In fact i've got a Table of subscriptions. 实际上,我有一个订阅表。 I count all subscriptions and i count all validated subscriptions. 我计算所有订阅,也计算所有经过验证的订阅。 It works. 有用。 But ... i would like to sum an another value of a subscription named CAR. 但是...我想总结一个名为CAR的订阅的另一个值。 I would like to sum all CAR and all validated CAR. 我想总结所有CAR和所有经过验证的CAR。

So my table looks like (in fact it's bigger than this) : 所以我的桌子看起来像(实际上比这更大):

ID | ID | NUM | NUM | CAR | 汽车| STATE | 州| DATE_SIGNATURE DATE_SIGNATURE

So this is my try : 所以这是我的尝试:

SELECT
        COUNT(s.num) as total_bs,
        SUM(CASE WHEN s.state = '400' THEN 1 ELSE 0 END) as total_validated_bs,
        SUM(s.car) as total_car,
        SUM(CASE WHEN s.state = '400' THEN 1 ELSE 0 END) as total_validated_car,
        DATE_FORMAT( s.date_signature, '%u' ) week_number,
        DATE_ADD(s.date_signature, INTERVAL(1-DAYOFWEEK(s.date_signature)) +1 DAY) week_start
        FROM subscription as s
        GROUP BY DATE_FORMAT( s.date_signature, '%u' )
        LIMIT 0,12

And this is my result : 这是我的结果:

Total subscription : 276 订阅总数:276

Total validated subscriptions : 170 已验证的订阅总数:170

Total CAR : 4378760 总计车数:4378760

Total Validated CAR : 170 已验证的总CAR:170

All is correct except validated car. 除经验证的汽车外,其他所有信息均正确。 It must be a bigger number but lower than CAR. 该数字必须大于CAR,但必须小于CAR。 IN Fact i would like to have the SUM of all CAR from subscriptions that are validated. 实际上,我希望获得经过验证的订阅中所有CAR的总和。

It's possible to make it in a single query ? 是否可以在单个查询中完成? I saw some solutions with a SELECT in another SELECT but i find this one not really elegant. 我在另一个SELECT中看到了一些带有SELECT的解决方案,但我发现这个解决方案并不十分优雅。 But i don't know if it's efficient. 但是我不知道它是否有效。

Thanks everybody :) 谢谢大家 :)

In Your query 
        SUM(CASE WHEN s.state = '400' THEN 1 ELSE 0 END) as total_validated_bs,
        SUM(CASE WHEN s.state = '400' THEN 1 ELSE 0 END) as total_validated_car
both are same  total_validated_bs and total_validated_car
so it will return same result for both.
you should go with different condition for total_validated_car.
Do this
        SUM(CASE WHEN s.state = '400' THEN s.car ELSE 0 END) as total_validated_car

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM