2016-05-10 3 views
0

я получил задачу создания статистики из таблиц, которые выглядят следующим образом:Группа SQL с помощью новых заданных параметров

Faculty 
    1 FacultyName1 
    2 FacultyName2 
    3 FacultyName3 
    4 FacultyName4 
    5 FacultyName5 

и это:

Student 
1 StudentName1 FacultyNr2 
2 StudentName2 FacultyNr3 
3 StudentName3 FacultyNr5 
4 StudentName4 FacultyNr2 

Теперь я должен создать статистику, которая Группирует Факультеты во вновь созданные поля и группы.

Скажи:

Faculty Group 1 Count: 3 
Faculty Group 2 Count: 1 

для этого примера позволяет сказать, что все те FacultyName1, FacultyName2, FacultyName3 следует listet от "факультетской группы 1" и FacultyName4 и FacultyName5 как из «Факультета группы 2" .

Я начал делать следующее:

Select Count(*) 
FROM Student INNER JOIN Faculty on Student.FacultyID = Faculty.ID 

Но я застрял, пытаясь понять, как группу, как я мог бы создать группы в Кодексе, где я мог бы просто сказать: Group by FacultyGroups (Select Case When FacultyName = 'FacultyName1' = 'Faculty Group 1') или что-то похоже, делает кто-нибудь есть идея?

ответ

0

Есть более эффективные способы, но это должно работать:

SELECT 
    CASE 
     WHEN f.Name IN ('FacultyName1', 'FacultyName2', 'FacultyName3') THEN 'FacultyGroup1' 
     WHEN f.Name IN ('FacultyName4', 'FacultyName5') THEN 'FacultyGroup2' 
    END AS FacultyGroup, 
    COUNT(*) AS Students 
FROM 
    Student s 
    INNER JOIN Faculty f ON s.FacultyID = f.ID 
GROUP BY 
    CASE 
     WHEN f.Name IN ('FacultyName1', 'FacultyName2', 'FacultyName3') THEN 'FacultyGroup1' 
     WHEN f.Name IN ('FacultyName4', 'FacultyName5') THEN 'FacultyGroup2' 
    END; 

Если ваша «группа» логика становится слишком долго, то это будет выглядеть неаккуратно в запросе, так что вы можете заранее рассчитать это. Вы могли бы сделать это, например, используя подзапрос, так что одна часть вашего запроса (подзапрос) преобразует факультеты в группы, а другая «основная» часть будет считать учащихся каждой группой.

1

Предполагая, что вы добавили столбец GroupID в вашем факультетской таблице

SELECT COUNT(*), f.GroupID 
FROM Student AS s 
INNER JOIN Faculty AS f ON s.FacultyID = f.ID 
GROUP BY f.GroupID 

Это дает количество студентов в группе факультетов и идентификатор этой группы

+0

№ Группы имеют полностью новые имена, которые не могут быть найдены на БД – gbZDB

Смежные вопросы