Hassan Majid Ответов: 2

Как написать SQL-инструкцию для этого вопроса


Чемпионы (~500 строк)

ГОД СТРАНА НАЗВАНИЕ РОЛЬ

2018 Франция Дидье Дешам Менеджер
2018 Франция Уго Льорис Вратарь
2018 Полузащитник Франции Поль Погба
2014 Германия Йоахим Лев Менеджер
2014 Германия Месут Озил Полузащитник
2014 Германия Мирослав Клозе Нападающий
2002 Бразилия Да Силва Полузащитник
1994 Бразилия Да Силва Полузащитник
1998 Франция Дидье Дешам Полузащитник

Напишите запрос, показывающий, сколько раз каждая страна выигрывала чемпионат мира для стран, выигравших чемпионат мира по крайней мере дважды.

Что меня смущает, так это то, сколько раз каждая страна выигрывала его, когда, например, есть Франция 3 раза в 2018 году. Я не уверен, нужен ли мне параметр count или оператор select.

Я был бы благодарен за дополнительные разъяснения и помощь в этом, или если мой запрос нуждается в какой-либо настройке.

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

Вот что я придумал:

ВЫБЕРИТЕ ГОД, СТРАНУ
ОТ ЧЕМПИОНОВ
Где страна>=2;

Я надеюсь, что это правильно.

MarcusCole6833

выберите отдельную страну , год
от чемпионов
где Страна != "Англия"

2 Ответов

Рейтинг:
2

OriginalGriff

Как я сказал вам вчера: мы более чем готовы помочь тем, кто застрял, но это не значит, что мы здесь, чтобы сделать все это для вас! Мы не можем сделать всю работу, вам либо платят за это, либо это часть ваших оценок, и было бы совсем несправедливо, если бы мы сделали все это за вас.

Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.

Мы все еще не делаем за тебя домашнее задание ...


OriginalGriff

Вы можете проверить его и посмотреть, что он производит, а затем сравнить это с тем, что вас просили. Затем вы можете попытаться решить, что вам нужно сделать, чтобы получить реальный ответ.
Просто попросив других разобраться с этим для вас, вы ничему не научитесь.

Рейтинг:
0

Maciej Los

Если вы хотите получить названия стран, которые выиграли более одного раза, попробуйте это:

SELECT COUNTRY, COUNT(COUNTRY) As CountOfWins
FROM CHAMPIONS
GROUP BY COUNTRY
HAVING COUNT(COUNTRY)>=2;


Для получения более подробной информации, пожалуйста, смотрите: Агрегатные функции (Transact-SQL) - SQL Server | Microsoft Docs[^]

Если вы хотите получить названия стран и года также, вы должны:
1. Создайте подзапрос (self-join):
SELECT c1.COUNTRY, c2.[YEAR]
FROM (
    SELECT COUNTRY, COUNT(COUNTRY) As CountOfWins
    FROM CHAMPIONS 
    GROUP BY COUNTRY
    HAVING COUNT(COUNTRY)>=2
) c1 INNER JOIN CHAMPIONS c2 ON c1.COUNTRY = c2.COUNTRY
ORDER BY c1.COUNTRY, c2.[YEAR];



2. Используйте функцию ранжирования (см.: Функции ранжирования (Transact-SQL) - SQL Server | Microsoft Docs[^])
SELECT COUNTRY, [YEAR], ROW_NUMBER() OVER(PARTITION BY COUNTRY ORDER BY [YEAR]) AS WinsCounter
FROM CHAMPIONS;