我想在单个查询中对不同值进行计数和求和。 事实上,我有一个订阅表。我统计所有订阅,并计算所有经过验证的订阅。有用。但是......我想总结一个名为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的解决方案,但我发现这个解决方案并不优雅。但我不知道它是否有效。
谢谢大家:)
答案 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