#sql #join #select #group-by
#sql #Присоединиться #выберите #группировать по
Вопрос:
У меня есть три таблицы, и я пытаюсь выполнить оператор select, чтобы получить результат, подобный приведенному ниже Teams:
ID Name
1 A
2 B
3 C
Игроки:
ID Name TeamID
1 P1 1
2 P2 1
3 P3 2
Цели: (тип цели: H для дома, A для гостей, T для тренировки)
ID PID goaltype
1 1 A
2 1 A
3 1 H
4 2 A
5 2 H
6 3 A
7 3 T
Результат будет выглядеть:
Team totalGoals home away trainig percentage[(home/total)*100]
A 5 2 3 0 40%
B 2 0 1 1 0
C 0 0 0 0 0
Это мой текущий запрос:
select t.name,
count(g.id) as totalGoals,
sum(case when g.GTYPE = 'H' then 1 else 0 end) as home,
sum(case when g.GTYPE = 'A' then 1 else 0 end) as away,
sum(case when g.GTYPE = 'T' then 1 else 0 end) as training,
--(home/totalGoals) as percentage
from teams t
left join players p on p.TeamID = t.id
left join goals g on g.pid = p.id
group by t.name
Комментарии:
1. Какой sql server вы используете и что вы пробовали?
2. С чем именно у вас проблемы? Что вы хотите знать? Что вы пробовали и где вы застряли? Пожалуйста, покажите свой запрос и расскажите нам, с какой проблемой вы столкнулись.
Ответ №1:
Вы можете использовать условную агрегацию для получения желаемых результатов:
SELECT t.Name AS Team,
COUNT(g.goaltype) AS totalGoals,
SUM(CASE WHEN g.goaltype = 'H' THEN 1 ELSE 0 END) AS home,
SUM(CASE WHEN g.goaltype = 'A' THEN 1 ELSE 0 END) AS away,
SUM(CASE WHEN g.goaltype = 'T' THEN 1 ELSE 0 END) AS training,
CASE WHEN COUNT(g.goaltype) = 0 THEN 0
ELSE 100.0 * SUM(CASE WHEN g.goaltype = 'H' THEN 1 ELSE 0 END) /
COUNT(g.goaltype)
END AS percentage
FROM Teams t
LEFT JOIN Players p ON p.TeamID = t.ID
LEFT JOIN Goals g ON g.PID = p.ID
GROUP BY t.Name
ORDER BY t.Name
Вывод:
team totalgoals home away training percentage
A 5 2 3 0 40
B 2 0 1 1 0
C 0 0 0 0 0
Комментарии:
1. спасибо, я опубликовал комментарий выше, а затем заметил ваш ответ. Я остановился на процентах и работал над этим, когда увидел ваш 🙂 Еще раз спасибо
2. @RMohammed не беспокойтесь; вам действительно нужно снова написать формулу для
totalgoals
иhome
для вычисления процента, поскольку вы не можете использовать псевдонимы вSELECT
предложении.3. @RMohammed Я добавил ваш существующий запрос к вашему вопросу, надеюсь, это предотвратит получение большего количества отрицательных отзывов.
4. большое вам спасибо и примите мои извинения за любые неудобства