Я ищу запрос 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-запросом?
Используйте условную агрегацию:
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;
Смотрите демо.