powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Посчитать количество дисциплин
3 сообщений из 3, страница 1 из 1
Посчитать количество дисциплин
    #39778326
ren4in
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица Нагрузка (Код_преподавателя, Код_дисциплины, стоимость_часа, почасовая_оплата)
Код_преподавателя и Код_дисциплины - первичный ключ
Почасовая_оплата=True или False (bit)
Нужно вывести количество дисциплин, которое ведет каждый штатный преподаватель, у которого средняя стоимость часа за все дисциплины больше чем средняя стоимость часа у каждого совместителя, который ведет хотя бы одну дисциплину, которую ведет этот штатник.

Штатный преподаватель - это преподаватель, у которого хотя бы в одной дисциплине поле Почасовая_оплата=False, если же все поля=true, то это совместитель

Можете помочь это сделать?

Код для создания таблицы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE [dbo].[Нагрузка](
    [Код_преподавателя] [INT] NOT NULL,
    [Код_дисциплины] [INT] NOT NULL,
    [Стоимость_часа] [DECIMAL](18, 2) NULL,
    [Почасовая_оплата] [bit] NULL,
 CONSTRAINT [PK_Нагрузка] PRIMARY KEY CLUSTERED 
(
    [Код_преподавателя] ASC,
    [Код_дисциплины] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO



Попытался решить задачу так, но этот запрос считает неправильно
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Select Штатные_преподаватели.Код_преподавателя, count(Штатные_преподаватели.Код_дисциплины) as Количество_дисциплин
from Нагрузка Штатные_преподаватели inner join
(Select Код_преподавателя, Код_дисциплины, Стоимость_часа 
from Нагрузка where Код_преподавателя NOT IN (Select Код_преподавателя from Нагрузка Where Почасовая_оплата=0)) 
Совместители on Штатные_преподаватели.Код_дисциплины=Совместители.Код_дисциплины
inner join (Select Код_преподавателя, AVG(Стоимость_часа) as Средняя_зарплата
from Нагрузка
Where Код_преподавателя NOT IN (Select Код_преподавателя from Нагрузка Where Почасовая_оплата=0)
group by Код_преподавателя) Зарплаты_Совместителей On Совместители.Код_преподавателя=Зарплаты_Совместителей.Код_преподавателя
inner join (Select Код_преподавателя, AVG(Стоимость_часа) as Средняя_зарплата
from Нагрузка
Where Код_преподавателя  IN (Select Код_преподавателя from Нагрузка Where Почасовая_оплата=0)
group by Код_преподавателя) Зарплаты_штатников On Штатные_преподаватели.Код_преподавателя=Зарплаты_штатников.Код_преподавателя

where Штатные_преподаватели.Код_преподавателя  IN (Select Код_преподавателя from Нагрузка Where Почасовая_оплата=0) and Зарплаты_штатников.Средняя_зарплата>Зарплаты_Совместителей.Средняя_зарплата
Group by Штатные_преподаватели.Код_преподавателя
...
Рейтинг: 0 / 0
Посчитать количество дисциплин
    #39778393
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with t as ( select * from [dbo].[Нагрузка] )
   , [штат] as ( select * from t where [Почасовая_оплата] = 0 )
   , [совм] as ( select * from t where [Почасовая_оплата] = 1 )
   , [штат.ср.стоим] as ( select [Код_преподавателя], [Стоимость_часа] = avg([Стоимость_часа]), [Кол-во] = count(*) from  [штат] group by [Код_преподавателя] )
   , [совм.ср.стоим] as ( select [Код_преподавателя], [Стоимость_часа] = avg([Стоимость_часа]), [Кол-во] = count(*) from  [совм] group by [Код_преподавателя] )
  select * from [штат.ср.стоим] as a
    where not exists( select * 
	                    from [штат] as t 
						     inner join [совм] as x on t.[Код_дисциплины] = x.[Код_дисциплины] 
							 inner join [совм.ср.стоим] as y on y.[Код_преподавателя] = x.[Код_преподавателя] 
				        where t.[Код_преподавателя] = a.[Код_преподавателя] and y.[Стоимость_часа] >= a.[Стоимость_часа]
					)
...
Рейтинг: 0 / 0
Посчитать количество дисциплин
    #39778412
ren4in
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cпасибо
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Посчитать количество дисциплин
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]