Взяв среднее значение пустышки в SQL - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь выяснить долю строк, в которых два столбца не совпадают:

Этот код дает один или ноль (в зависимости от того, как я определяю пустышку):

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

Но хотелось бы узнать, в чем проблема с первым способом.

1 Ответ

1 голос
/ 06 июня 2019

Вы берете 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...