从两个SQL Count()结果计算百分比

时间:2016-05-16 09:57:08

标签: sql count percentage

我需要计算最终交易与总交易相比的百分比(例如,包括在制品和最终交易)。通过浏览网页,我到达了:

SELECT 100 * (SELECT COUNT(transaction_id) from t_transaction_main   
WHERE due_date = '2016-05-16' and (suspend_status !='' OR
close_date != '0-0000-00'))/COUNT(transaction_id) from t_transaction_main as test;

到目前为止它起作用了;但是,虽然最终的交易查询是按预期进行的,但我实际上只需要在特定日期(此处为2016-05-16)将其除以交易。但是当我添加WHERE子句时......

SELECT 100 * (SELECT COUNT(transaction_id) from t_transaction_main   
WHERE due_date = '2016-05-16' and (suspend_status !='' OR
close_date !='0-0000-00'))/COUNT(transaction_id) WHERE due_date = '2016-05-16' from t_transaction_main as test;

它立即停止工作并返回语法错误。我也尝试将COUNT(transaction_id) WHERE due_date = '2016-05-16'括在括号内,但它没有帮助。

欢迎任何解决方案,谢谢。

4 个答案:

答案 0 :(得分:0)

我没有看到在第二个查询中使用WHERE作为子查询只返回这些日期

答案 1 :(得分:0)

将错误的子句序列放在from子句

之前的位置
SELECT 100 * (SELECT COUNT(transaction_id) 
        from t_transaction_main   
        WHERE due_date = '2016-05-16' and (suspend_status !='' OR
  close_date !='0-0000-00'))/COUNT(transaction_id) 
FROM t_transaction_main as test 
WHERE due_date = '2016-05-16' ;

答案 2 :(得分:0)

WHERE条款需要在最终from t_transaction_main as test

之后

答案 3 :(得分:0)

为什么要使用子查询?甚至两个聚合函数?

SELECT AVG(CASE WHEN suspend_status <> '' OR close_date <> '0-0000-00'
                THEN 100.0 ELSE 0
           END)
FROM t_transaction_main test 
WHERE due_date = '2016-05-16' ;

这比原始查询简单