Не могли бы вы помочь мне рассчитать долю
Table
user_id attendance Date
1 1 01.01.2018
2 Null 01.01.2018
3 1 02.01.2018
4 Null 03.01.2018
5 1 03.01.2018
Если у пользователя есть посещаемость, то 1, в противном случае - Null.
Необходимо рассчитать процент посещаемости с 01.01.18 по 02.01.18. Например, на 01.01.2018 из двух пользователей был 1 (50%), на 02.01.2018 - 100%.
Спасибо!
Это ужасно похоже на stackoverflow.com/questions/52121144/how-to-calculate-percen т
@ Тим Бигелейзен, это свидание
Повторяющийся вопрос, проверьте комментарии
Если ваши показатели посещаемости могут отличаться от нуля, отредактируйте свой вопрос, добавьте образцы данных и объясните их нам.
Возможный дубликат Как рассчитать процент?






Вы можете попробовать этот запрос:
SELECT
Date,
100.0 * COUNT(attendance) / COUNT(*) AS perc_attendance
FROM yourTable
WHERE Date BETWEEN '2018-01-01' AND '2018-01-02'
GROUP BY
Date;
Это предполагает, что данный пользователь явится на явку не более одного раза в определенную дату. Также предполагается, что ваш столбец Date является столбцом фактической даты, а не просто текстом.
Благодарность! Но как я могу выбрать только «1» из посещаемости?
Need to calculate percent of attendance ... я неправильно прочитал ваш вопрос, или вы задали неправильный вопрос?
Если у меня будут «2» и «1» вместо «1» и Null - какие изменения я должен внести в свой запрос?
На самом деле вам не нужно ничего менять, потому что COUNT считает любое значение, отличное от NULL, как 1, а любое значение NULL как ноль. Так что мой ответ должен работать, если должно появиться 1, 2 или любое другое число.
select v.date1 , case when s.no_people is null and v.showup_people then 100
when v.showup_people is null and s.no_people is not null then 0
else (v.showup_people / (v.showup_people + s.no_people))*100 end outcome
from
(select count(*) as no_people , date as date1
from yourTable
where attendance is null
group by date) s
right outer join
(select count(*) as showup_people , date as date1
from yourTable
where attendance is not null
group by date) v
on(v.date1 = s.date1)
замените from table на from your table name ..
это будет работать всегда, независимо от того, сколько у вас свиданий. Дело в том, что null + число в mysql дает значение null. в oracle sql вы можете просто использовать последний статус else.
вот Демо
Вы можете использовать этот запрос, если пытаетесь отобразить как новую таблицу, но тогда вы должны ее создать:
SELECT Date,100.0 * COUNT(attendance) / COUNT(*) AS attendancepercent
FROM Table WHERE Date BETWEEN '2018-01-01' AND '2018-01-02'
GROUP BY Date;
01.01.2018- это буквальная строка или это тип даты?