GET Count, электронная почта и связывание значений в таблице

В ответ на этот вопрос, который был закрыт (Перечислите все электронные письма и интернет-провайдеров и подсчитайте количество каждого ОБЪЕКТА), я надеюсь, что наконец смогу найти решение, которое ищу.

У меня есть таблица 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.


50
1

Ответ:

Решено

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

См. пример