sql - 在 SQL 中取 dummy 的平均值
问题描述
我试图找出两列不相同的行的分数:
此代码给出 1 或 0(取决于我如何定义虚拟对象):
SELECT CAST(AVG(subq.ens) AS DECIMAL(10,7))
from (select INDDATO_DATO, INDTIDSPUNKT_DRGKONTAKT_DATO, LeveranceDato_DATO,
case
when INDDATO_DATO = INDTIDSPUNKT_DRGKONTAKT_DATO THEN 1
else 0
end as ens
FROM [Patient_kval].[DRG2018].[V_DRG2018_DRGKONTAKTER]
where LeveranceDato_DATO= '2019-03-27'
) subq
但是我通过数两次除法解决了这个问题,结果是35%。即我已经这样做了:
SELECT count(*)
FROM [Patient_kval].[DRG2018].[V_DRG2018_DRGKONTAKTER]
where LeveranceDato_DATO= '2019-03-27' and INDDATO_DATO = INDTIDSPUNKT_DRGKONTAKT_DATO; -- 1.954.352
SELECT count(*)
FROM [Patient_kval].[DRG2018].[V_DRG2018_DRGKONTAKTER]
where LeveranceDato_DATO= '2019-03-27';-- 5.441.763
但我想知道第一种方法有什么问题。
解决方案
You are taking an avg
of integers and the result is casted to integer, see https://docs.microsoft.com/en-us/sql/t-sql/functions/avg-transact-sql?view=sql-server-2017 . Use decimal constants instead.
SELECT CAST(AVG(subq.ens) AS DECIMAL(10,7))
from (select INDDATO_DATO, INDTIDSPUNKT_DRGKONTAKT_DATO, LeveranceDato_DATO,
case
when INDDATO_DATO = INDTIDSPUNKT_DRGKONTAKT_DATO THEN 1.0
else 0.0
end as ens
FROM [Patient_kval].[DRG2018].[V_DRG2018_DRGKONTAKTER]
where LeveranceDato_DATO= '2019-03-27'
) subq
推荐阅读
- c++ - 为 Microsoft C++ 配置 VS Code
- scala - 从 spark dataframe scala 写入 redis 时出现垃圾值
- sql-server - 两个日期之间的天数和负值更新字符串所需的 SQL 脚本
- arrays - *NgFor 自定义 JSON 类别文件不呈现
- html - ActionView::Template::Error: Can't resolve image into URL: undefined method `[]' for nil:NilClass
- api - 在 Golang 中获取用户位置
- node.js - 在 node.js 中使用时刻时区
- node.js - webpack不忽略文件夹
- jaxb - java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException 尽管在 pom.xml 中有依赖关系
- flutter - 如何在不使用任何库的情况下在颤振中使用 bloc