2011-12-20 7 views
3
SELECT s.sid, s.sname, COUNT(s.age) AS age 
FROM student s 
INNER JOIN enrolled e ON s.sid = e.sid 
INNER JOIN class c ON e.ccode = c.ccode 
INNER JOIN tutor t ON c.tid = t.tid 
WHERE s.programme = 'CIS' 
AND t.tname = 'Kathy Bond' 
GROUP BY s,sid, s.sname 
ORDER BY COUNT(s.age) DESC 
LIMIT 1; 

Мне нужно найти старейшего студента из СНГ, который зарегистрирован в классе облигаций Кэти. это то, что я получил до сих пор, он говорит, что не может определить оператора заказа? Эти таблицы:sql найти старейшего студента

Класс:

ccode | cname   | weekday | meets at | room | tid 
________________________________________________________________________ 
CIS166 | Intro to Comp | Tue  | 10:00:00 | MB300 | 1 
________________________________________________________________________ 
CIS177 | Maths   | Mon  | 15:00:00 | MB100 | 6 
________________________________________________________________________ 
CIS188 | Info Syst  | Thu  | 14:00:00 | MB230 | 5 
________________________________________________________________________ 
CIS199 | Intro to Java | Fri  | 10:00:00 | MB300 | 4 
________________________________________________________________________ 
CIS277 | Algorithmics | Thu  | 14:00:00 | MB200 | 2 
________________________________________________________________________ 
CIS288 | Database Syst | Mon  | 14:00:00 | MB142 | 1 
________________________________________________________________________ 
CIS297 | Web Design | Mon  | 16:00:00 | MB109 | 3 
________________________________________________________________________ 
CIS298 | C++   | Fri  | 10:00:00 | MB110 | 8 

Репетитор:

tid | tname 
_____________________ 
1 | Rob Hoffman 
_____________________ 
2 | James Butler 
_____________________ 
3 | Kathy Bond 
_____________________ 
4 | Theodora Stewart 
_____________________ 
5 | Mike Richie 
_____________________ 
6 | John Kay 
_____________________ 
7 | Mary Tregear 
_____________________ 
8 | Mark Robinson 

Enrolled:

sid | ccode 
______________ 
211 | CIS288 
203 | CIS298 
214 | CIS297 
105 | CIS177 
215 | CIS297 
104 | CIS188 
210 | CIS297 
338 | CIS320 
102 | CIS177 
338 | CIS399 
204 | CIS288 
204 | CIS277 
102 | CIS199 
203 | CIS297 
105 | CIS199 
331 | CIS320 
202 | CIS299 
205 | CIS299 
210 | CIS298 
331 | CIS399 
321 | CIS399 
210 | CIS288 
210 | CIS277 
204 | CIS297 
321 | CIS320 
328 | CIS388 
327 | CIS388 
211 | CIS297 
333 | CIS399 
215 | CIS288 
104 | CIS199 

Студент:

sid | sname  | programme | level | age 
____________________________________________ 
101 | Lorry Ross | CS   | 1  | 18 
102 | Lydia Ken | CIS  | 1  | 18 
103 | Bob Chung | CS   | 1  | 18 
104 | Sonia Morris | CIS  | 1  | 18 
105 | Mark Poppy | CS   | 1  | 19 
106 | Megan Chi | IT   | 1  | 20 
218 | Diana McDon | IT   | 2  | 20 
219 | Nick Smith | IT   | 2  | 21 
+2

Почему вы считаете возраст? –

+0

У вас есть орфографическая ошибка в вашем SQL: 'GROUP BY s, sid, s.sname' должно быть' GROUP BY s.sid, s.sname' (точка не запятая). Ошибка копирования или вставка ошибки? –

ответ

2

Я не думаю, что вам нужно GROUP BY здесь. Только ORDER BY и LIMIT 1 должны работать. Попробуйте это:

SELECT s.sid, s.sname, s.age 
FROM student s 
INNER JOIN enrolled e ON s.sid = e.sid 
INNER JOIN class c ON e.ccode = c.ccode 
INNER JOIN tutor t ON c.tid = t.tid 
WHERE s.programme = 'CIS' 
AND t.tname = 'Kathy Bond' 
ORDER BY s.age DESC 
LIMIT 1 
0

Проблема заключается в следующем: ORDER BY COUNT (s.age) DESC

Оно должно быть: ORDER BY DESC s.age

Вы отсчеты в первая часть инструкции SELECT, где она принадлежит.

1

«Самый старый» означает MAX(age).

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