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 子句中。请帮忙 :)

4

2 回答 2

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

这是作业吗?

于 2012-06-01T04:38:17.303 回答
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

应该管用。

于 2012-06-01T04:41:05.227 回答