在 SQL 中取虚拟值的平均值
Taking mean of dummy in SQL
我试图找出两列不相同的行的分数:
此代码给出一或零(取决于我如何定义虚拟对象):
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%。 IE。我这样做了:
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
但是我想知道第一种方法有什么问题。
您正在取 avg
个整数,结果被转换为整数,请参阅 https://docs.microsoft.com/en-us/sql/t-sql/functions/avg-transact-sql?view=sql-server-2017。请改用十进制常量。
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
我试图找出两列不相同的行的分数:
此代码给出一或零(取决于我如何定义虚拟对象):
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%。 IE。我这样做了:
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
但是我想知道第一种方法有什么问题。
您正在取 avg
个整数,结果被转换为整数,请参阅 https://docs.microsoft.com/en-us/sql/t-sql/functions/avg-transact-sql?view=sql-server-2017。请改用十进制常量。
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