Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Запросы в ms sql

sf avs Ученик (92), на голосовании 1 год назад
Дана БД, состоящая из таблиц: Спортсмен ( код спортсмена, ФИО, дата рождения, спортивный разряд),
Соревнование (код соревнования, название, место проведения, дата проведения),
Участие (номер учетной записи, код спортсмена, код соревнования, результат попытка1,
попытка2, попытка3).
Задание:
  1. Определите название и место проведения соревнования, в котором приняло участие больше всего спортсменов
  2. Выведите ФИО спортсменов и их наилучшие результаты.
  3. Найдите название соревнований, в которых все спортсмены имеют разный средний балл (используйте HAVING).
  4. Выведите спортсмена, название соревнования, его наилучший средний результат в порядке убывания результатов.
Голосование за лучший ответ
Вай? Мастер (2026) 1 год назад
1.
SELECT TOP 1 Соревнование.название, Соревнование.место_проведения
FROM Соревнование
JOIN Участие ON Соревнование.код_соревнования = Участие.код_соревнования
GROUP BY Соревнование.название, Соревнование.место_проведения
ORDER BY COUNT(DISTINCT Участие.код_спортсмена) DESC

2.
SELECT Спортсмен.ФИО, MAX(Участие.результат_попытка1, Участие.результат_попытка2, Участие.результат_попытка3) AS 'Наилучший результат'
FROM Спортсмен
JOIN Участие ON Спортсмен.код_спортсмена = Участие.код_спортсмена
GROUP BY Спортсмен.ФИО

3.
SELECT Соревнование.название
FROM Соревнование
JOIN Участие ON Соревнование.код_соревнования = Участие.код_соревнования
GROUP BY Соревнование.название
HAVING COUNT(DISTINCT Участие.результат_попытка1 + Участие.результат_попытка2 + Участие.результат_попытка3) = COUNT(Участие.номер_учетной_записи)

4.
SELECT TOP 1 Спортсмен.ФИО, Соревнование.название, MAX((Участие.результат_попытка1 + Участие.результат_попытка2 + Участие.результат_попытка3)/3) AS 'Наилучший средний результат'
FROM Спортсмен
JOIN Участие ON Спортсмен.код_спортсмена = Участие.код_спортсмена
JOIN Соревнование ON Участие.код_соревнования = Соревнование.код_соревнования
GROUP BY Спортсмен.ФИО, Соревнование.название
ORDER BY MAX((Участие.результат_попытка1 + Участие.результат_попытка2 + Участие.результат_попытка3)/3) DESC
_ Искусственный Интеллект (833917) 1 год назад
1. Название и место проведения соревнования, в котором приняло участие больше всего спортсменов:

SELECT s.Название, s.Место_проведения, COUNT(DISTINCT u.код_спортсмена) AS КоличествоСпортсменов
FROM Участие u
INNER JOIN Соревнование s ON u.код_соревнования = s.код_соревнования
GROUP BY u.код_соревнования, s.Название, s.Место_проведения
ORDER BY COUNT(DISTINCT u.код_спортсмена) DESC
LIMIT 1;


2. ФИО спортсменов и их наилучшие результаты:

SELECT s.ФИО, MAX(u.результат_попытка1, u.результат_попытка2, u.результат_попытка3) AS НаилучшийРезультат
FROM Участие u
INNER JOIN Спортсмен s ON u.код_спортсмена = s.код_спортсмена
GROUP BY s.код_спортсмена, s.ФИО
ORDER BY НаилучшийРезультат DESC;


3. Название соревнований, в которых все спортсмены имеют разный средний балл:

SELECT s.Название
FROM Соревнование s
JOIN Участие u ON s.код_соревнования = u.код_соревнования
GROUP BY s.Название, u.результат_попытка1, u.результат_попытка2, u.результат_попытка3
HAVING COUNT(DISTINCT ROUND((u.результат_попытка1 + u.результат_попытка2 + u.результат_попытка3) / 3.0, 2)) = COUNT(*);


4. Спортсмен, название соревнования, его наилучший средний результат в порядке убывания результатов:

SELECT sp.ФИО, so.Название, ROUND(MAX((u.результат_попытка1 + u.результат_попытка2 + u.результат_попытка3) / 3.0), 2) AS НаилучшийСреднийРезультат
FROM Участие u
INNER JOIN Спортсмен sp ON u.код_спортсмена = sp.код_спортсмена
INNER JOIN Соревнование so ON u.код_соревнования = so.код_соревнования
GROUP BY sp.код_спортсмена, sp.ФИО, so.код_соревнования, so.Название
ORDER BY НаилучшийСреднийРезультат DESC;
Похожие вопросы