Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

SQL-запрос

17K
31 мая 2008 года
neWManAlex
15 / / 20.10.2006
Здраствуйте, уважаемые знатоки и пользователи этого форума. Помогите "перевести" пару запросов на язык баз данных SQL.

В общем ситуация первая:
Есть таблица "Курсовые_Проекты" с полями "Номер_Курсового_Проекта", "Номер_Дисциплины" и "Номер_Семестра". Нужно сделать такой запрос:
В каком семестре максимальное количество курсовых проектов?

Вторая ситуация:
Есть таблица "Контрольные_Работы" с полями "Номер_КР", "Номер_Дисциплины", "Номер_Семестра", также есть связанная по полю "Номер_Дисциплины" таблица "Дисциплины" с полями "Номер_Дисциплины" и "Название_Дисциплины". Запрос выглядит следующим образом:
Сколько контрольных работ в семестре 8 и по каким дисциплинам? (т.е. нужно подсчитать колличество КР в семестре 8 и вывести список дисциплин с этим контрольными).

Заранее спасибо за помощь!
21K
31 мая 2008 года
per%cent
39 / / 05.10.2007
ситуация первая:
незнаю можно ли так, не пробовал:
SELECT MAX(COUNT("Номер_Курсового_Проекта")) FROM "Курсовые_Проекты" GROUP BY "Номер_Семестра"
17K
01 июня 2008 года
neWManAlex
15 / / 20.10.2006
per%cent, спасибо за совет, но SQL-запрос не работает :( . Вот что пишет:
 
Код:
Невозможно использование статической функции в выражении (MAX(COUNT("Номер_Курсового_Проекта"))).
17K
01 июня 2008 года
neWManAlex
15 / / 20.10.2006
Попробовал реализовать первую ситуацию вот таким способом:
SELECT "Номер_семестра", MAX(CP_In_Semestr) AS MAX_CP_IN_SEMESTR
FROM (SELECT "Номер_семестра", COUNT("Номер_семестра") AS CP_In_Semestr
FROM "Курсовые_проекты"
GROUP BY "Номер_семестра")
GROUP BY "Номер_семестра";

Получается, что внутрений запрос выводит список семестров и колличество в них курсовых работ, а внешний должен выбирать максимальное значение кол-ва курсовых работ и выводить одну строку с номером семестра, в котором максимальное кол-во курсовых работ, и колличеством курсовых работ в этом семестре. Помогите исправить запрос.
37K
02 июня 2008 года
iyulka
12 / / 06.05.2008
у меня 2 предложения:

1. Создаем запрос, который возвращает все семестры с количеством курсовых работ, результат запроса сортируем по убыванию количества курсовых работ. Внешний запрос извлекает из внутреннего первую строку (которая будет соответствовать семестру с наибольшим количеством работ)
[highlight=sql]select semester
from (select semester, count(project_no) as cnt
from projects
group by semester
order by cnt desc)
where rownum=1
[/highlight]

2. Использовать конструкцию group by ... having ...
[highlight=sql]select semester, count(project_no)
from projects
group by semester
having count(project_no) >= (select max(cnt)
from (select semester, count(project_no) as cnt
from projects
group by semester)
)
[/highlight]
37K
02 июня 2008 года
iyulka
12 / / 06.05.2008
как найти количество контрольных в 8ом семестре, думаю, и так понятно:
[highlight=sql]
select count(workid)
from k_works
where semester=8
[/highlight]

чтобы вывести список дисциплин, по которым были работы в 8 семестре:
[highlight=sql]
select d.name
from k_works as w, disciplines as d
where w.disciplineid=d.disciplineid and w.semester=8
[/highlight]
для исключения дублирования дисциплин, можно добавить distinct

ну а если надо все одним запросом достать, то можно объединить результаты двух запросов с помощью union
55K
07 января 2010 года
timurkino
6 / / 07.01.2010
добрый день у меня возникла аналогичная ситуация я попробовал как выпосоветовали в первой ситуации первым способам но вышла ошибка- order by нельзя исползовать без команды top я немного все изменил и заработало


select top 1 semester
from (select semester, count(project_no) as cnt
from projects
group by semester
order by cnt desc)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог