2012-06-01 5 views
0

У меня есть две таблицы:граф, внутреннее соединение

DRIVER(Driver_Id,First name,Last name,...);

PARTICIPANT IN CAR ACCIDENT(Participant_Id,Driver_Id-foreign key,responsibility-yes or no,...). 

Теперь, мне нужно, чтобы выяснить, какой водитель участвовал в аварии, где ответственность «да», и сколько раз. Я сделал это:

Select Driver_ID, COUNT (Participant.Driver_ID)as 'Number of accidents' 
from Participant in car accident 
where responsibility='YES' 
group by Driver_ID 
order by COUNT (Participant.Driver_ID) desc 

Но, мне нужно добавить водителей первого и фамилию из первой таблицы (с помощью внутреннего соединения, я полагаю). Я не знаю, как, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY. Пожалуйста, помогите :)

ответ

1

Как вы подозревали, вам необходимо использовать внутреннее соединение. И поскольку первое имя и фамилия теперь являются частью SELECT, вам также необходимо включить эти столбцы в GROUP BY.

Select Driver_ID, First_name, Last_name COUNT (Participant.Driver_ID) as "Number of accidents" 
from "Participant in car accident" join Driver on "Participant in car accident".Driver_ID = Driver.Driver_ID 
where responsibility='YES' 
group by Driver_ID, First_name, Last_name 
order by COUNT (Participant.Driver_ID) desc 

Это домашнее задание?

+0

Спасибо, он отлично работает! И это не домашняя работа, я просто пытаюсь упростить свою работу, создав простую базу данных, и я начинаю в этой области, поэтому каждый может ожидать более глупые вопросы, такие как этот :)) – Urosh

0

Вы можете использовать встроенную таблицу:

SELECT d.driver_first_name, 
     d.driver_last_name, 
     r.incident_count 
FROM DRIVER d 
INNER JOIN (SELECT driver_id, 
        count(*) incident_count 
      FROM PARTICIPANT_IN_CAR_ACCIDENT 
      WHERE responsibility = 'YES' 
      GROUP BY driver_id) r 
    ON d.driver_id = r.driver_id 
ORDER BY r.incident_count DESC 

Должен работать.

+0

Большое спасибо за вашу помощь! – Urosh

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