Объединить данные с одинаковым идентификатором

У меня есть задание, в котором мне нужно использовать агрегатные функции в запросах. Я продолжаю сталкиваться с проблемой, когда есть несколько записей для одного и того же идентификатора, и я бы предпочел, чтобы они были объединены в один прогон (добавлены вместе для одного и того же идентификатора).

-- Aggregate #3 - Show the total amount of pledges for each Team 
-- for particular year.   Order the results by amount of pledges highest 
-- to lowest.  This query should result in 1 row per Team.  
-- It should include the Team ID, Team name (or a combination of Sport, 
-- Level, and Gender), the total pledge amount and the Event date/year.

SELECT DISTINCT SUM(TEGS.monPledgeAmount) AS TotalPledge
  ,TE.intEventID
  ,TTC.intTeamandClubID
  ,TE.dtmEventDate
  ,TGS.strGenderDesc
  ,TLT.strLevelDesc
FROM TEventGolfers AS TEG JOIN TEvents TE
    ON TEG.intEventID = TE.intEventID

JOIN TGolfers AS TG
    ON TG.intGenderID = TEG.intGolferID

JOIN TEventGolferSponsors AS TEGS
    ON TEGS.intEventGolferID = TEG.intEventGolferID

JOIN TEventGolferTeamandClubs AS TEGTC
    ON TEGTC.intEventGolferID = TEG.intEventGolferID

JOIN TTeamandClubs AS TTC
    ON TTC.intTeamandClubID = TEGTC.intTeamandClubID

JOIN TLevelofTeams AS TLT
    ON TLT.intLevelofTeamID = TTC.intLevelofTeamID

JOIN TGenders AS TGS
    ON TGS.intGenderID = TTC.intGenderID


GROUP BY
    TEGS.monPledgeAmount
   ,TE.intEventID
   ,TTC.intTeamandClubID
   ,TE.dtmEventDate
   ,TGS.strGenderDesc
   ,TLT.strLevelDesc

Вывод ниже (идентификаторы должны быть объединены в столбце 3, «intTeamandClubID»):

0.80    2   3   2016-01-01  Female  Varsity Football
0.80    2   4   2016-01-01  Male    Varsity Golf
4.00    2   3   2016-01-01  Female  Varsity Football
4.00    2   4   2016-01-01  Male    Varsity Golf
10.00   2   3   2016-01-01  Female  Varsity Football
50.00   2   3   2016-01-01  Female  Varsity Football

Я хочу, чтобы «intTeamandClubID» был 1 строкой для одного и того же идентификатора, а «TotalPledge» добавлялся вместе.

Согласно Руководство Как спросить, пожалуйста, не размещать изображения кода, данных, сообщений об ошибках и т. д.. Вместо этого скопируйте или введите текст в свой вопрос, отформатировано как код. Зарезервируйте использование изображений для диаграмм или демонстрации ошибок рендеринга; то, что невозможно точно описать текстом.

Bohemian 10.04.2022 01:59

Подсказка: если вам нужно только каждоеintTeamandClubID и его общее количество, не выбирайте ничего другого.

Bohemian 10.04.2022 02:01

Обновил пост с вопросом, чтобы стало понятнее.

Thast16 10.04.2022 02:06
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
2
4
40
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы хотите суммировать значения TotalPledge для каждого intTeamandClubID. Для этого вам нужно будет создать отдельную группу для каждого intTeamandClubID. В вашем случае, поскольку вы выбираете несколько столбцов, вы создадите группу для каждой уникальной комбинации этих столбцов, что делается с помощью оператора ГРУППА ПО.

У вас уже есть это в вашем запросе, но вы также группируете по TotalPledge, что вам не нужно. Вы хотите СУММИТЬ это значение, поэтому вам следует удалить его из GROUP BY:

GROUP BY
   TE.intEventID
   ,TTC.intTeamandClubID
   ,TE.dtmEventDate
   ,TGS.strGenderDesc
   ,TLT.strLevelDesc

Обратите внимание, что, несмотря на то, что это имеет несколько вариантов использования вместе с GROUP BY, DISTINCT здесь не нужен, поскольку каждая группа (комбинация значений столбцов) уникальна. Однако оставление его в запросе не повлияет на результат.

Ответ принят как подходящий

Вы можете удалить ОТЧЕТЛИВЫЙ в предложении ВЫБРАТЬ и столбец TEGS.monPledgeAmount в предложении ГРУППА ПО.

SELECT SUM(TEGS.monPledgeAmount) AS TotalPledge
  ,TE.intEventID
  ,TTC.intTeamandClubID
  ,TE.dtmEventDate
  ,TGS.strGenderDesc
  ,TLT.strLevelDesc
FROM TEventGolfers AS TEG JOIN TEvents TE
    ON TEG.intEventID = TE.intEventID

JOIN TGolfers AS TG
    ON TG.intGenderID = TEG.intGolferID

JOIN TEventGolferSponsors AS TEGS
    ON TEGS.intEventGolferID = TEG.intEventGolferID

JOIN TEventGolferTeamandClubs AS TEGTC
    ON TEGTC.intEventGolferID = TEG.intEventGolferID

JOIN TTeamandClubs AS TTC
    ON TTC.intTeamandClubID = TEGTC.intTeamandClubID

JOIN TLevelofTeams AS TLT
    ON TLT.intLevelofTeamID = TTC.intLevelofTeamID

JOIN TGenders AS TGS
    ON TGS.intGenderID = TTC.intGenderID


GROUP BY
    
   TE.intEventID
   ,TTC.intTeamandClubID
   ,TE.dtmEventDate
   ,TGS.strGenderDesc
   ,TLT.strLevelDesc

Другие вопросы по теме