количество столбцов сгруппировать по - PullRequest
11 голосов
/ 23 апреля 2010

Я хава sql, как показано ниже:

select a.dept, a.name
  from students a
 group by dept, name
 order by dept, name

И получим результат:

dept   name
-----+---------
CS   | Aarthi
CS   | Hansan
EE   | S.F
EE   | Nikke2

Я хочу обобщить количество студентов для каждого отдела, как показано ниже:

dept   name        count
-----+-----------+------  
CS   | Aarthi    |  2
CS   | Hansan    |  2
EE   | S.F       |  2
EE   | Nikke2    |  2
Math | Joel      |  1

Как мне написать SQL?

Ответы [ 6 ]

18 голосов
/ 23 апреля 2010

Хотя кажется, что вы не показываете все таблицы, я могу только предположить, что существует еще одна таблица фактических показателей зачисления на одного учащегося

select a.Dept, count(*) as TotalStudents
  from students a
  group by a.Dept

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

select a.Dept, a.Name, b.TotalStudents
    from students a,
        ( select Dept, count(*) TotalStudents
             from students
             group by Dept ) b
    where a.Dept = b.Dept

Моя интерпретация вашего столбца «Имя» - это имя учащегося, а не фактического преподавателя класса, следовательно, мой дополнительный выбор / объединение. В противном случае, как и другим, достаточно использовать COUNT (*) в качестве третьего столбца.

6 голосов
/ 23 апреля 2010
select a.dept, a.name,
       (SELECT count(*)
          FROM students
         WHERE dept = a.dept)
  from students a
 group by dept, name
 order by dept, name

Это несколько сомнительный запрос, так как вы получаете дубликаты счетов отделов. Было бы чище получить список студентов, а отдел считается отдельным результатом. Конечно, могут быть прагматичные причины пойти другим путем, так что это не абсолютное правило.

1 голос
/ 23 апреля 2010
SELECT dept, name, COUNT(name) as CT from students
group by dept, name
order by dept, name
0 голосов
/ 23 апреля 2010

Это даст результаты, запрошенные выше

select a.dept, a.name, cnt
from student a
join (
select dept, count(1) as cnt
from student
group by dept
) b on b.dept = a.dept
0 голосов
/ 23 апреля 2010

Или иначе напишите просто

select dept, name, count(name) as nostud from students group by dept, name order by dept, name
0 голосов
/ 23 апреля 2010

Это должно сделать это (у меня нет среды для тестирования в минуту)

select a.dept, a.name, count(a.*) as NumOfStudents
from students a
group by dept, name order by dept, name

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...