Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Как посчитать?


Автор: Fighter 11.3.2007, 04:15
Имеется следующая структура БД(Access):

1. Таблица студентов (tbl_Students)
  id_Student
  id_Group
  Stud_Name
  Stud_Surname

2. Таблица типов приказов (tbl_PrikType)
  id_Type_Prik
  Prikaz

3. Таблица приказов (tbl_Prikaz)
  id_Prik
  id_Stud
  id_TypePrik

4. Таблица групп (tbl_Groups)
  id_Group
  Group_Name

В общем случае требуется посчитать общее число учащихся. С одной стороны кажется, что это легко, на самом деле здесь есть тонкость:
Вот, например содержимое таблицы типов приказов
  id_Type_Prik       Prikaz
         1                  Прием
         2               Отчисление

И теперь взглянем, на примерную таблицу приказов
  id_Prik         id_Stud         id_TypePrik
      1                  1                       1
      2                  2                       1 
      3                  3                       1
      4                  4                       1
      5                  5                       1
      6                  1                       2 
      7                  4                       2
      8                  3                       2

Всего записей в таблице - 8. Но, на самом деле у нас здесь есть 5 приказов на зачисление и 3 приказа на отчисление, в результате получается 2.

Если писать

Код

  select count(*) from 
  tbl_Prikaz


То он выведет 8. Можно ли на SQL как-нито записать. Алгоритм ведь простой - посчитай количество на зачисление, посчитай количество на отчисление. Из 1 вычти 2. А вот как это все на SQL написать?

Автор: batigoal 12.3.2007, 09:30
Вот так можно вывести список всех учащихся:
Код

select t.id_Stud from tbl_Prikaz t where t.id_TypePrik=1
minus
select t.id_Stud from tbl_Prikaz t where t.id_TypePrik=2;

Но вот как посчитать их количество - не знаю.

Автор: Akina 12.3.2007, 09:58
Поскольку не бывает для студента 2 приказа на зачисление либо на отчисление, то (в синтаксисе MS Access)

Код

SELECT [Q1]![OrdersIn]-[Q2]![OrdersOut] AS StudentsCount
FROM 
[
 SELECT Count(tbl_Prikaz.id_Prik) AS OrdersIn
 FROM tbl_Prikaz 
 WHERE (((tbl_Prikaz.id_TypePrik)=1))
 GROUP BY tbl_Prikaz.id_TypePrik
]. AS Q1, 
[
 SELECT Count(tbl_Prikaz.id_Prik) AS OrdersOut
 FROM tbl_Prikaz
 WHERE (((tbl_Prikaz.id_TypePrik)=2))
 GROUP BY tbl_Prikaz.id_TypePrik
]. AS Q2;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)