SQL группирует уникальные вхождения по дате

Я ищу запрос MySQL, чтобы подсчитать, сколько людей посетило веб-приложение. У меня есть база данных, в которой хранится информация о посетителях, которые они печатают и когда пытались войти:

+-----+-----------+--------+---------+---------------------+
| id  | person_id | area   | success | date_created        |
+-----+-----------+--------+---------+---------------------+
| 762 |       100 | client |       1 | 2022-06-28 09:22:35 |
| 763 |       100 | client |       1 | 2022-06-28 11:22:35 |
| 764 |       100 | client |       1 | 2022-06-28 14:22:35 |
| 765 |       102 | client |       1 | 2022-06-28 15:04:43 |
| 766 |       101 |   user |       1 | 2022-06-28 16:04:43 |
| 767 |       100 | client |       1 | 2022-06-29 15:07:29 |
| 768 |       101 |   user |       1 | 2022-06-30 09:18:41 |
| 769 |       100 | client |       1 | 2022-07-01 09:24:46 |
| 770 |       101 |   user |       1 | 2022-07-01 09:25:59 |
| 771 |       102 | client |       1 | 2022-07-01 14:17:57 |
| 772 |       103 | client |       1 | 2022-07-01 15:20:14 |
| 773 |       100 | client |       1 | 2022-07-02 13:01:49 |
| 774 |       100 | client |       1 | 2022-07-03 09:06:00 |
| 775 |       102 | client |       0 | 2022-07-03 12:11:23 |
| 776 |       103 | client |       1 | 2022-07-03 12:41:43 |

Мне нужно разобрать date_created на date, суммировать уникальные вхождения person_id, если are равно client, и суммировать по дате.

Не было бы проблем сделать это на другом языке программирования, но я борюсь с построением запроса в SQL. Нужно сделать это на коробке, и там не так уж много можно установить.

Ожидаемый результат:

+------------+--------------------+
| date       | successful_clients |
+------------+--------------------+
| 2022-06-28 |                  2 |
| 2022-06-29 |                  1 |
| 2022-06-30 |                  0 |
| 2022-07-01 |                  3 |
| 2022-07-02 |                  1 |
| 2022-07-03 |                  2 |

Что было бы эффективным SQL-запросом?

Освоение архитектуры микросервисов с 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
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Используйте условную агрегацию:

SELECT DATE(date_created) date,
       COUNT(DISTINCT CASE WHEN success AND area = 'client' THEN person_id END) successful_clients 
FROM tablename
GROUP BY date
ORDER BY date;

Смотрите демо.

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

Панды - вычислить внутри группы максимальное значение для минимума в столбце
Как подсчитать строки на основе значения столбца после его группировки по идентификатору
SQLite-запрос JOIN, CONCAT, подзапрос
Как мне сделать так, чтобы в моем операторе SQL отображалась только первая строка (самая низкая цена + общее количество покупок)
Запрос неверных результатов после изменения для повышения производительности
Подсчет и группировка по 2 разным столбцам SQL
Эффективный способ создания новых столбцов минимального значения определенного подмножества другого столбца в Pandas Dataframe
Как рассчитать расстояние широты и долготы относительно друг друга и рассчитать, сколько точек находится с определенной близостью
Ресурсы Google BigQuery превышены во время выполнения запроса. Как разделить большие оконные рамы с разделом в SQL
Как сгруппировать по дате, месяцу и неделе в sql?