MySQL - 如何在单个查询中进行计数和求和
MySQL - How to count and sum in a single query
我想在单个查询中对不同的值进行计数和求和。
事实上,我有 Table 的订阅。我计算所有订阅,我计算所有经过验证的订阅。有用。但是...我想总结一个名为 CAR 的订阅的另一个值。我想总结所有 CAR 和所有经过验证的 CAR。
所以我的 table 看起来像(实际上比这个大):
编号 |数量 |汽车 |状态 | 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
汽车总数:4378760
已验证 CAR 总数:170
除经过验证的汽车外,其他均正确。它必须是一个更大但小于 CAR 的数字。事实上,我想从经过验证的订阅中获得所有 CAR 的总和。
是否可以在单个查询中完成?我在另一个 SELECT 中看到了一些带有 SELECT 的解决方案,但我发现这个不是很优雅。但是不知道有没有效果
谢谢大家:)
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
我想在单个查询中对不同的值进行计数和求和。 事实上,我有 Table 的订阅。我计算所有订阅,我计算所有经过验证的订阅。有用。但是...我想总结一个名为 CAR 的订阅的另一个值。我想总结所有 CAR 和所有经过验证的 CAR。
所以我的 table 看起来像(实际上比这个大):
编号 |数量 |汽车 |状态 | 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
汽车总数:4378760
已验证 CAR 总数:170
除经过验证的汽车外,其他均正确。它必须是一个更大但小于 CAR 的数字。事实上,我想从经过验证的订阅中获得所有 CAR 的总和。
是否可以在单个查询中完成?我在另一个 SELECT 中看到了一些带有 SELECT 的解决方案,但我发现这个不是很优雅。但是不知道有没有效果
谢谢大家:)
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