Сумма подсчета в Oracle

Я новичок в 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

CTE не работает, потому что вы использовали идентификатор в нижнем регистре в двойных кавычках, но вы не включаете двойные кавычки, когда вы ссылаетесь на CTE в основном запросе. Узнать больше ..

APC 15.11.2018 16:22
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
732
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

вам не нужна избыточная сумма, у вас уже есть количество строк на 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

Спасибо большое, а какая разница между псевдонимом в кавычках и без него. Я подумал, что надо заключить это в кавычки. Теперь я не понимаю, где я должен их использовать (кавычки), а где нет.

J.Doe 15.11.2018 16:32

Цитирование идентификаторов делает их чувствительными к регистру. Но вам нужно использовать их только в Oracle Database для доступа к идентификаторам в нижнем регистре. Так что, как правило, проще избегать цитирования имен

Chris Saxon 15.11.2018 16:37

Значит, в Oracle db нет ситуаций, когда мне нужно использовать цитирование? Раньше я работал в ms sql и их было много

J.Doe 16.11.2018 11:40

Если вы хотите получить имя в нижнем регистре, вы должны использовать кавычки. То же самое, если вы хотите использовать символы, отличные от буквенно-цифровых, _, $ или #. Однако вы редко встретите это. При условии, что вы не цитируете идентификаторы;)

Chris Saxon 16.11.2018 16:36

Хорошо, а что насчет апострофа? Я вижу, что он использовался в выражении where, а где еще?

J.Doe 21.11.2018 09:58

Я не уверен, что ты имеешь в виду. Если вы хотите использовать апостроф в имени таблицы / столбца, вам нужно заключить его в двойные кавычки. Значения между двумя одинарными кавычками являются текстовыми литералами.

Chris Saxon 26.11.2018 10:48

Другие вопросы по теме