我正在构建一个查询,用于搜索 Medicare 数据库,该数据库列出了医生对各种程序收取的费用。
理想情况下,此查询将:
- 返回每条记录,这意味着每个医生的每个程序。 (稍后我将添加过滤
WHERE
子句) - 返回医生对每个程序收取的平均费用
- 返回平均费用与每位医生收费之间的百分比差异
- 返回每位医生所有这些百分比差异的平均值,生成元成本差异分数。
通过下面的查询,除了最后一个目标,我已经能够实现所有目标。
SELECT medicare.*,
peerAverage.average AS charge_average,
( medicare.average_submitted_chrg_amt - peerAverage.average ) /
peerAverage.average * 100 AS difference_from_average,
Avg( ( medicare.average_submitted_chrg_amt - peerAverage.average ) /
peerAverage.average * 100 ) as total_difference_from_average
FROM medicare
JOIN (SELECT Avg(average_submitted_chrg_amt) AS average,
procedure_code
FROM medicare
GROUP BY procedure_code) AS peerAverage
ON medicare.procedure_code = peerAverage.procedure_code
ORDER BY procedure_code ASC,
difference_from_average DESC
当我添加最后一个 SELECT
条件 ( Avg( ( medicare.average_submitted_chrg_amt - peerAverage.average ) / peerAverage.average * 100 ) as total_difference_from_average
),查询只返回一条记录。
删除该条件,查询将返回正确的记录数。我做错了什么?
最佳答案
聚合函数将聚合级别向上移动。在您为 average 函数指定分组条件之前,它将始终返回对所有值聚合的一行,由表达式返回
关于mysql - 在 mySQL 中平均子查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23203791/