SQL - вычисление процентных столбцов, сгруппированных по месяцам - PullRequest
0 голосов
/ 24 августа 2018

У меня есть таблица, в которой есть столбец даты и времени для метки времени и битовый столбец для прохода / неудачи, например,

Timestamp                     Pass
2018-01-19 07:01:42.000         1
2018-01-19 07:05:42.000         0

Я могу группировать по годам / месяцам, чтобы показать общее количество пропусков в месяц:

SELECT  DATEPART(YEAR,Timestamp) AS Year,
        DATEPART(MONTH,Timestamp) AS Month,
        COUNT(Timestamp) as Total
    FROM table
    WHERE Pass  = 1
GROUP BY DATEPART(YEAR,Timestamp), DATEPART(MONTH,Timestamp)
ORDER BY DATEPART(YEAR,Timestamp), DATEPART(MONTH,Timestamp)

Мне также нужно отображать итоговые результаты за месяц (пройдено и не пройдено) и, если возможно, отображать процент пройденного, например,

Year    Month    Passes   Total   Percentage Pass
2018      1       2729     3275       83.32

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 24 августа 2018
SELECT  DATEPART(YEAR,Timestamp) AS Year,
        DATEPART(MONTH,Timestamp) AS Month,
        SUM (CAST (Pass AS TINYINT)) AS Passes,
        COUNT(*) as Total,
        CAST (SUM (Pass) AS Money) / COUNT(*) AS Percentage
FROM table
GROUP BY DATEPART(YEAR,Timestamp), DATEPART(MONTH,Timestamp)
ORDER BY DATEPART(YEAR,Timestamp), DATEPART(MONTH,Timestamp)
0 голосов
/ 24 августа 2018
SELECT  DATEPART(YEAR,Timestamp) AS Year,
        DATEPART(MONTH,Timestamp) AS Month,
        SUM(CAST(Pass AS INT)) AS Passes,
        COUNT(*) as Total,
        CAST(1.00*SUM(CAST(Pass AS INT)) / COUNT(*) AS DECIMAL(5,2) AS PercentagePass -- 1.00 is used to avoid integer maths
FROM table
GROUP BY DATEPART(YEAR,Timestamp), DATEPART(MONTH,Timestamp)
ORDER BY DATEPART(YEAR,Timestamp), DATEPART(MONTH,Timestamp)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...