mysql - 在 mySQL 中平均子查询的结果

标签 mysql sql

我正在构建一个查询,用于搜索 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/

相关文章:

mysql Case语句在游标中不起作用

sql - 在 postgresql 中,只有当 "name"为 false 时,如何才能使 "deleted"唯一?

mysql - 左连接上的 Concat 正则表达式

mysql - 将 SQL 结果导出到 CSV,但保留字段中的换行符值

mysql - 仅选择存在的列

Python peewee - 从多个表中选择

mysql - 未订购的客户

php - 每 30 秒运行一次 SQL 查询(计数),然后将输出保存到某个文件

php - 内部加入后"Column ' id ' in where clause is ambiguous"?

mysql - MySQL 中的 UNIQUE 索引是否区分大小写?