Рассчитать пропорцию (процент)

Не могли бы вы помочь мне рассчитать долю

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%.

Спасибо!

01.01.2018 - это буквальная строка или это тип даты?

Tim Biegeleisen 01.09.2018 17:07

Это ужасно похоже на stackoverflow.com/questions/52121144/how-to-calculate-percen‌ т

Strawberry 01.09.2018 17:09

@ Тим Бигелейзен, это свидание

Елисей Горьков 01.09.2018 17:10

Повторяющийся вопрос, проверьте комментарии

Ümañg ßürmån 01.09.2018 17:19

Если ваши показатели посещаемости могут отличаться от нуля, отредактируйте свой вопрос, добавьте образцы данных и объясните их нам.

Tim Biegeleisen 01.09.2018 17:22

Возможный дубликат Как рассчитать процент?

chris 01.09.2018 17:54
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
6
54
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете попробовать этот запрос:

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» из посещаемости?

Елисей Горьков 01.09.2018 17:13
Need to calculate percent of attendance ... я неправильно прочитал ваш вопрос, или вы задали неправильный вопрос?
Tim Biegeleisen 01.09.2018 17:14

Если у меня будут «2» и «1» вместо «1» и Null - какие изменения я должен внести в свой запрос?

Елисей Горьков 01.09.2018 17:19

На самом деле вам не нужно ничего менять, потому что COUNT считает любое значение, отличное от NULL, как 1, а любое значение NULL как ноль. Так что мой ответ должен работать, если должно появиться 1, 2 или любое другое число.

Tim Biegeleisen 01.09.2018 17:20
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;

Другие вопросы по теме