Я новичок в Oracle, и мне было интересно, почему я не могу подсчитать сумму. Вот пример моих запросов и попыток:
select job_id, SUM(count(job_id)) as "jobs"
from employees
group by job_id
ошибка:
ORA-00937: not a single-group group function
Я тоже пробовал использовать cte, но, к своему удивлению, не могу:
with cte1 as (
select job_id, count(job_id) as "jobs"
from employees
group by job_id
)
select sum(jobs) from cte1
ORA-00904: "JOBS": invalid identifier


вам не нужна избыточная сумма, у вас уже есть количество строк на job_id:
select job_id, count(job_id) as "jobs" from employees group by job_id
Вы можете вкладывать агрегаты. Но вам нужно удалить столбцы, по которым вы группируете, из списка выбора:
select sum(count(*)) as "jobs"
from hr.employees
group by job_id;
jobs
107
Это подсчитывает количество строк для каждого задания. А затем подводит итог.
Это то же самое, что:
with jobs as (
select count(*) c
from hr.employees
group by job_id
)
select sum ( c ) from jobs;
SUM(C)
107
Ваш CTE терпит неудачу, потому что вы процитировали «вакансии». Это делает его идентификатором в нижнем регистре, на который нужно ссылаться в кавычках для доступа:
with cte1 as(
select job_id,
count( job_id ) as "jobs"
from hr.employees
group by job_id
)
select sum( "jobs" )
from cte1;
SUM("JOBS")
107
Спасибо большое, а какая разница между псевдонимом в кавычках и без него. Я подумал, что надо заключить это в кавычки. Теперь я не понимаю, где я должен их использовать (кавычки), а где нет.
Цитирование идентификаторов делает их чувствительными к регистру. Но вам нужно использовать их только в Oracle Database для доступа к идентификаторам в нижнем регистре. Так что, как правило, проще избегать цитирования имен
Значит, в Oracle db нет ситуаций, когда мне нужно использовать цитирование? Раньше я работал в ms sql и их было много
Если вы хотите получить имя в нижнем регистре, вы должны использовать кавычки. То же самое, если вы хотите использовать символы, отличные от буквенно-цифровых, _, $ или #. Однако вы редко встретите это. При условии, что вы не цитируете идентификаторы;)
Хорошо, а что насчет апострофа? Я вижу, что он использовался в выражении where, а где еще?
Я не уверен, что ты имеешь в виду. Если вы хотите использовать апостроф в имени таблицы / столбца, вам нужно заключить его в двойные кавычки. Значения между двумя одинарными кавычками являются текстовыми литералами.
CTE не работает, потому что вы использовали идентификатор в нижнем регистре в двойных кавычках, но вы не включаете двойные кавычки, когда вы ссылаетесь на CTE в основном запросе. Узнать больше ..