Member 14016340 Ответов: 1

Обобщение базы данных SQL


У меня есть база данных, которую я пытаюсь обобщить ниже.

GAME_ID GOALIEID SAVE
2001 5 лет
2001 4 года
2001 5 N
2001 4 года
2001 5 N

По сути, я пытаюсь показать с помощью game_id и goalieid, в какой игре какой вратарь сделал больше всего сейвов и сколько сейвов было у вратаря в этой игре. Я поставил здесь только одну игру, чтобы сделать пример очень простым.

Я пытаюсь получить результат sql, который может привести к этому

GAME_ID ВРАТАРЬ СОХРАНЯЕТ
2001 4 2

Что я уже пробовал:

ВЫБЕРИТЕ GAME_ID, GOALIEID, COUNT(СОХРАНИТЬ)
ОТ GIRAFFE.MLS
ГДЕ SAVE = 'N'
ГРУППА ПО GAME_ID
ЗАКАЗ ПО СЧЕТУ (DIDSCORE) DESC

Однако это только общая сумма всех сейвов, а не конкретная сумма, сделанная 1 вратарем.

1 Ответов

Рейтинг:
2

littleGreenDude

Обратите внимание, что это решение предназначено для SQL server, так как у меня нет MySQL, но я ожидаю, что эти решения будут похожи. Мне пришлось изменить имя поля SAVE на SAVEFLAG, потому что SAVE-это зарезервированное слово в SQL server.

create table #Temp (
	GAME_ID INT,
	GOALIEID INT,
	SAVEFLAG VARCHAR(1)
	)

	INSERT INTO #Temp SELECT 2001, 5,'Y'
INSERT INTO #Temp SELECT 2001, 4,'Y'
INSERT INTO #Temp SELECT 2001, 5,'N'
INSERT INTO #Temp SELECT 2001, 4,'Y'
INSERT INTO #Temp SELECT 2001, 5,'N'

-- Goalie that allowed the most goals
SELECT top 1 GAME_ID, GOALIEID, COUNT(SAVEFLAG) 
FROM #Temp
WHERE SAVEFLAG = 'N'
GROUP BY GAME_ID, GOALIEID
ORDER BY 3 DESC

-- Goalie with the most saves
SELECT top 1 GAME_ID, GOALIEID, COUNT(SAVEFLAG) AS SAVES
FROM #Temp
WHERE SAVEFLAG = 'Y'
GROUP BY GAME_ID, GOALIEID
ORDER BY 3 DESC