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

时间:2015-02-12 16:37:58

标签: php mysql sql count sum

我想在单个查询中对不同值进行计数和求和。 事实上,我有一个订阅表。我统计所有订阅,并计算所有经过验证的订阅。有用。但是......我想总结一个名为CAR的订阅的另一个值。我想总结所有CAR和所有经过验证的CAR。

所以我的桌子看起来像(实际上它比这更大):

ID | NUM | CAR |国家| DATE_SIGNATURE

所以这是我的尝试:

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

这是我的结果:

总订阅:276

总验证订阅量:170

总CAR:4378760

总验证CAR:170

除了经过验证的汽车外,一切都是正确的。它必须是一个更大的数字但低于CAR。事实上,我希望从已经过验证的订阅中获得所有CAR的总和。

可以在一个查询中制作它吗?我在另一个SELECT中看到了一些带有SELECT的解决方案,但我发现这个解决方案并不优雅。但我不知道它是否有效。

谢谢大家:)

1 个答案:

答案 0 :(得分:3)

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