В ответ на этот вопрос, который был закрыт (Перечислите все электронные письма и интернет-провайдеров и подсчитайте количество каждого ОБЪЕКТА), я надеюсь, что наконец смогу найти решение, которое ищу.
У меня есть таблица list_all
, которая выглядит так:
| EMAIL | PROPERTY | ISP_GROUP | LAST_SENT_DATE |
--------------------------------------------------------------------
| email1 | prop1 | gmail | 2024-06-25 |
| email2 | prop3 | yahoo | 2024-06-02 |
| email3 | prop2 | other | 2024-06-15 |
| email1 | prop5 | gmail | 2024-06-16 |
| email1 | prop6 | gmail | 2024-06-22 |
--------------------------------------------------------------------
Я могу запустить такой запрос, чтобы подсчитать, сколько каждого электронного письма существует между определенной датой:
SELECT
COUNT(`email`) as 'EMAIL COUNT'
, `email`
, `isp_group`
FROM `list_all`
WHERE `last_sent_date` BETWEEN '2024-06-01' AND '2024-06-30'
GROUP BY `email`, `isp_group`
ORDER BY `EMAIL COUNT` DESC
Это выдаст что-то вроде этого:
| EMAIL COUNT | email | isp_group |
---------------------------------------------------
| 3 | email1 | gmail |
| 1 | email2 | yahoo |
| 1 | email3 | other |
---------------------------------------------------
Я пытаюсь найти способ показать СОБСТВЕННОСТЬ, но сохранить общий подсчет.
Возможно, есть способ перечислить каждое свойство в другом столбце, но разместить их все в одной ячейке, например:
| EMAIL COUNT | email | isp_group | PROPERTY |
----------------------------------------------------------------
| 3 | email1 | gmail | p1,p2,p3 |
| 1 | email2 | yahoo | p3 |
| 1 | email3 | other | p2 |
----------------------------------------------------------------
Если я смогу реализовать вышеизложенное, это, вероятно, решит мою проблему.
Я не уверен, возможно ли это, но если да, пожалуйста, помогите мне это написать.
Спасибо.
🤔 А знаете ли вы, что...
SQL позволяет объединять данные из разных таблиц с помощью операторов JOIN.
GROUP_CONCAT — это функция, которую вы ищете.
Эта функция возвращает строковый результат с объединенным значением, отличным от NULL. ценности из группы. Он возвращает NULL, если нет значений, отличных от NULL. Полный синтаксис выглядит следующим образом:
GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])
Добавьте GROUP_CONCAT(property) as property
в свой запрос
SELECT COUNT(`email`) as 'EMAIL COUNT',
email ,
isp_group,
GROUP_CONCAT(property) as property
FROM `list_all`
WHERE `last_sent_date` BETWEEN '2024-06-01' AND '2024-06-30'
GROUP BY `email`, `isp_group`
ORDER BY `EMAIL COUNT` DESC