2015-01-14 1 views
0

Вот мои таблицыSQL Group по нескольким столбцам и несколько таблиц

CREATE TABLE Course(Cno CHAR(6), Cname NVARCHAR(20) NOT NULL,PRIMARY KEY(Cno)) 
CREATE TABLE SC(Sno CHAR(7) NOT NULL,Cno CHAR(6) NOT NULL,Grade TINYINT, 
    PRIMARY KEY(Sno, Cno), 
    FOREIGN KEY(Sno) REFERENCES Student(Sno), 
    FOREIGN KEY(Cno) REFERENCES Course(Cno) 
) 

стол курс

Cno Cname  
------------ 
C001 Math 
C002 CS 
C003 Database 

стол SC

Sno Cno Grade 
------------------- 
1  C001 80 
2  C002 90 
2  C003 70 
3  C002 60 

Хотите ...:

Cno Cname Number 
----------------------- 
C002 CS  2 
C001 Math  1 
C003 Database 1 

этот код работал

select top 3 with ties Course.Cno, Course.Cname, count(SC.Cno) AS Number 
from Course left join SC 
    on Course.Cno = SC.Cno 
    group by Course.Cno, Cname, Semester 
    order by count(SC.Cno) desc 

, но если я использую "GoUp по Course.Cno", не работал ..

Почему я должен добавить "CNAME, Семестр"?


Я пробовал на mysql работал..бум sql server 2012 нет.

+0

Какие СУБД вы используете? SQL Server? –

+0

yep..mysql работает – 0neSe7en

ответ

0

Используйте подзапрос, чтобы получить количество:

select Cno, Cname, (select count(*) from sc where c.cno = sc.cno) as cnt 
from Course as c 
order by cnt 
+0

Большое спасибо. подзапрос обрабатывается. если я хочу заказать по счету (*). 'select Cno, Cname, (выберите count (*) из sc, где c.cno = sc.cno), как число от курса как C порядка по номеру desc)'. Не могли бы вы объяснить, что группа по одному столбцу не работает. Спасибо ~ – 0neSe7en

+0

@ 0neSe7en, попробуйте удалить семестр из группы GROUP BY и используйте count (*) в списке выбора. Сделайте также ORDER BY Number DESC. – jarlh

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