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

Calculating percentage from two SQL Count() results

我需要计算已完成交易占总交易的百分比(例如,包括进行中交易和已完成交易)。通过浏览网络,我得出了:

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' 括在括号内,但没有用。

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

我不明白在第二个查询中使用 WHERE 作为子查询无论如何只返回这些日期的意义

您将 where 放在 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' ;

WHERE 子句需要放在最后的 from t_transaction_main as test

之后

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

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' ;

这比您原来的查询简单得多。