2016-05-12 2 views
0

Заявление о проблеме: «Создайте запрос, который дает общее количество сотрудников, и из общей суммы сотрудников которые были наняты между 1995-1998 годами, оба включены ».SELECT запрос, в котором один атрибут имеет условие, а другой - в той же таблице. SQL

я успел подумать, как и протестировали их, так что я знаю, что они работают отделенный:

SELECT COUNT(employee_id) AS "Total number of employees" 
FROM employees 

для первого вопроса и

SELECT COUNT(employee_id) AS "Total between 1995-1198" 
FROM employees 
WHERE hire_date BETWEEN '1-ENE-1995' AND '31-12-1998'; 

ответ

5

Вы хотите условную агрегацию. Вот один способ:

select count(*) as Count_Total, 
     sum(case when hire_date >= date '1995-01-01' and hire_date < date '1999-01-01' 
       then 1 else 0 
      end) as Count1995_1998 
from employees; 

Примечания:

  • Это использует date классификатор для даты. Это позволяет вам вводить стандартные форматы ISO в Oracle. При использовании дат используйте согласованный формат.
  • Это использует явные сравнения для столбца даты с < для более поздней даты. Это специально. В Oracle столбец с типом данных date также может содержать время. Компонент времени может отбрасывать запросы.
  • Условное агрегирование - это использование оператора case в функции агрегации.
+0

Я не совсем понимаю этот синтаксиса так как я использую sacnax sql-разработчика oracle. Является ли Count_total псевдоним ?, также, почему SUM и не COUNT? Последнее, мой учитель колледжа сказал нам, что это основные запросы, поэтому мы должны иметь возможность делать их без методов (мы их не видели). Можете ли вы сделать редактирование в моем коде, чтобы я стал более понятным? – AliAs

+0

@AliAs. , , 'Count_Total' является псевдонимом. На «простой» запрос нет учета вкуса, но это довольно простой запрос. –

+0

@AliAs - да, 'count' может использоваться вместо' sum' в строке # 2. То, что показал Гордон, является эффективным способом написания запроса, где вы получаете оба ответа, просматривая таблицу только один раз. Вы говорите, что не изучили выражение «CASE» в классе? – mathguy

-1

Как фа, как я понимаю, вопрос Sql сервера: SELECT COUNT (*) от сотрудников, где HireDate между (firstDate, ENDDATE) Я желаю это помогает вам

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