从两个 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' ;
这比您原来的查询简单得多。
我需要计算已完成交易占总交易的百分比(例如,包括进行中交易和已完成交易)。通过浏览网络,我得出了:
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' ;
这比您原来的查询简单得多。