Как включить столбец метки времени в запрос, который уже использует и агрегирует функцию?

#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, ДОЛЖНЫ быть каким-то образом объединены. У вас есть два варианта с приведенной выше таблицей:

  1. Сохранение одной и той же группы по функциям и принимает любое значение для метки времени (при условии, что они уникальны для каждого названия действия)
 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
 
  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 столбцам.