#sql #timestamp #aggregate
Вопрос:
У меня есть база данных sql под названием textbankvendor.messages_экспорт всех сообщений, отправленных из организации, которая проводит текстовые кампании.
Ниже приведены соответствующие столбцы в этой базе данных, которые я использую:
activity_title (varchar): имя банка учебников, которому принадлежит отдельное сообщение
message_сегменты (целое число): количество сегментов (сегмент-это группа из 160 символов) в сообщении
activity_published_at (метка времени): дата публикации учебника
Таким образом, примером пары строк в базе данных может быть:
activity_title | сегменты сообщений | деятельность, опубликованная на |
---|---|---|
Мартовский Информационно-пропагандистский банк | 3 | 2021-03-18 20:32:00.045294 |
Апрельский аутрич Texbank | 4 | 2021-04-22 18:27:00.045294 |
Мартовский Информационно-пропагандистский банк | 3 | 2021-03-18 20:32:00.045294 |
Апрельский Информационно-пропагандистский банк | 4 | 2021-04-22 18:27:00.045294 |
Моя цель-вывести все уникальные банки текстов в базе данных вместе с общим количеством сегментов сообщений, отправленных для всех сообщений в этом банке текстов, и датой публикации банка текстов. Используя приведенный выше пример, цель будет заключаться в следующем:
activity_title | совокупные_мессаге_сегменты | деятельность, опубликованная на |
---|---|---|
Мартовский Информационно-пропагандистский банк | 6 | 2021-03-18 20:32:00.045294 |
Апрельский аутрич Texbank | 8 | 2021-04-22 18:27:00.045294 |
Я смог успешно использовать приведенный ниже запрос, чтобы получить название действия и количество сегментов сообщений:
SELECT
activity_title
, SUM (message_segments) AS "cumulative_message_segments"
FROM textbankvendor.messages_export
GROUP BY 1
ORDER BY 1
Однако при попытке получить activity_published_at в качестве переменной я сталкиваюсь с сообщениями об ошибках. Следующий запрос выдает (и несколько вариантов/корректировок методом проб и ошибок) сообщение об ошибке:
SELECT
activity_title
, SUM (message_segments) AS "cumulative_message_segments"
, activity_published_at
FROM textbankvendor.messages_export
GROUP BY 1
ORDER BY 1
Статус: Не удалось
Ошибка в SQL: столбец «messages_export.activity_published_at» должен отображаться в предложении GROUP BY или использоваться в агрегатной функции
Есть ли способ успешно запросить этот предполагаемый результат?
Комментарии:
1. Отметьте свой вопрос в базе данных, которую вы используете.
Ответ №1:
Все столбцы, которые не отображаются в списке GROUPBY, ДОЛЖНЫ быть каким-то образом объединены. У вас есть два варианта с приведенной выше таблицей:
- Сохранение одной и той же группы по функциям и принимает любое значение для метки времени (при условии, что они уникальны для каждого названия действия)
SELECT
activity_title
, SUM (message_segments) AS "cumulative_message_segments"
, ANY_VALUE(activity_published_at) as activity_published_at
FROM textbankvendor.messages_export
GROUP BY 1
ORDER BY 1
- Поместите метку времени непосредственно в столбцы группировка по столбцам
SELECT
activity_title
, activity_published_at
, SUM (message_segments) AS "cumulative_message_segments"
FROM textbankvendor.messages_export
GROUP BY 1, 2
ORDER BY 1
Ответ №2:
Если вам нужна одна строка на название действия, я бы предложил:
SELECT activity_title,
SUM(message_segments) AS cumulative_message_segments,
MIN(activity_published_at) as activity_published_at
FROM textbankvendor.messages_export
GROUP BY 1
ORDER BY 1;
Проблема с вашим запросом заключается в том, что SELECT
столбцы не соответствуют GROUP BY
столбцам.