Как мне создать оператор select для следующего вопроса?

#sql #oracle #subquery

#sql #Oracle #подзапрос

Вопрос:

Извините, что задаю простой вопрос, но как вы создаете этот оператор Select и каков ваш мыслительный процесс? Я перечислил следующую таблицу, которая, по моему мнению, необходима для этого оператора select.

Вопрос: Создайте инструкцию SELECT для отображения списка того, сколько раз услуга запрашивалась у каждого сотрудника. Отобразите идентификатор персонала, его имя, service_no, описание сервиса и общее количество запросов.

 Table: SERVICES
Column Name || Constraints || Default Value || Data Type || Length
SERVICE_NO  || Primary Key ||               || VarChar2  || 10
DESCRIPTION ||             ||               || VarChar2  || 50
CONTRACTOR  ||             ||               || VarChar2  || 20
CCONTACT_NO ||             ||               || VarChar2  || 10

Table: SERVICE_REQUEST
Column Name  || Constraints                          || Default Value || Data Type || Length
SR_ID        || Primary Key                          ||               || Number    || 10
SERVICE_NO   || Foreign Key to the SERVICES table    ||               || VarChar2  || 10
STAFF_ID     || Foreign Key to the STAFF table       ||               || VarChar2  || 10
TEC_ID       || Foreign Key to the TECHNICIANS table ||               || VarChar2  || 10
REQUEST_DATE ||                                      ||               || Date      ||
REQUEST_TIME ||                                      ||               || VarChar2  || 10

Table: STAFF
Column Name || Constraints                       || Default Value || Data Type || Length
STAFF_ID    || Primary key                       ||               || VarChar2  || 10
SNAME       ||                                   ||               || VarChar2  || 30
SIC_NO      || Secondary key                     ||               || VarChar2  || 10
SADDRESS    ||                                   ||               || VarChar2  || 70
SPHONE      ||                                   ||               || VarChar2  || 8
POSITION    ||                                   ||               || VarChar2  || 30
HIRE_DATE   ||                                   ||               || Date      || 
SALARY      ||                                   ||               || Number    || 7,2
SCH_ID      || Foreign Key to the SCHOOL table   ||               || VarChar2  || 10
  

Комментарии:

1. Почему бы вам не попробовать что-нибудь и не показать нам, в чем у вас проблема? Это будет здорово для вас…

2. Вам нужно будет объединить все три таблицы и использовать group by предложение, чтобы показать итоговые данные по каждому сотруднику / сочетанию услуг. В Интернете есть много примеров.

3. Внутреннее объединение служб и персонала в таблицу service_request по их первичным ключам, группировка по тем числам, которые вы хотите получить в результате, и используйте count(*) для определения количества раз!

4. SQL select s.staff_id, s.sname, ser.service_no, ser.description, count(ser.service_no) from staff s inner join service_request sr on s.staff_id = sr.staff_id inner join services ser on ser.service_no = sr.service_no group by s.staff_id, s.sname, ser.service_no, ser.description / Итак, я сделал это для своего запроса, однако я не уверен, правильно ли это, поскольку мой лектор не предоставил никаких данных, и я не могу проверить, прав ли я ;-;

5. Ваш запрос выглядит хорошо.

Ответ №1:

Используйте запрос.

 select s.staff_id, 
s.sname,    
ser.service_no,
ser.description, 
(select count(service_no) from staff where service_no = ser )
 from service_request sr ,services ser
where  s.staff_id = sr.staff_id 
and ser.service_no = sr.service_no;