2016-12-24 2 views
1

У меня есть это SQL заявление:SQL хотите спросить о Select пункта

select max(avrg) 
from (select sum(points) as avrg 
     from marks 
     group by num_eleve) s; 

У меня были проблемы, что делает его работу и получается, что я нуждался в s в самом конце, без него утверждение не удается.

Я хочу понять, что делает s. Другими словами, почему это работает в то время как следующее не удается?

select max(avrg) 
from (select sum(points) as avrg 
     from marks 
     group by num_eleve); 
+2

Какая у вас СУБД? MySQL, Oracle, SQL Server и т. Д.? –

+0

Я просто использую phpmyadmin – user3564550

ответ

0
select max(avrg) 
from (select sum(points) as avrg 
     from marks 
     group by num_eleve) s; 

В приведенном выше запросе s это имя псевдонима к sub-select

(select sum(points) as avrg from marks group by num_eleve) 

Это будет использоваться для обозначения столбцов, присутствующих в Sub-select. Ваш запрос может быть записан в виде

select max(s.avrg) --here I have added s.avrg 
from (select sum(points) as avrg 
     from marks 
     group by num_eleve) s; 

Кроме того, если вы хотите, чтобы присоединиться к югу выберите с другой таблицей, которая имеет столбец с именем avrg затем дифференцируется из какой таблицы вы хотите avrg значение столбца s будет использоваться

select max(s.avrg) --here I have added s.avrg to pull valued from sub-select not from another_table 
from (select sum(points) as avrg 
     from marks 
     group by num_eleve) s Left join another_table b on s.avrg = b.avrg 
+0

Какой стандарт требует этого? –

+0

Я думаю, кроме Oracle для каждой СУБД это необходимо –

+0

Похоже, что в 1992 году это требует: https://blog.jooq.org/2014/06/24/should-i-put-that-table-alias-or-not/ –

0

Эта часть вашего запроса:

(select sum(points) as avrg from marks group by num_eleve) 

выступает в виде таблицы, и просто нужно имя. «S» будет делать, но это может быть что угодно. Вы можете назвать это MyTable или Averages или Mxyzptlk, если хотите.

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