【问题标题】:Count, inner join计数,内连接
【发布时间】:2012-06-01 04:32:43
【问题描述】:

我有两张桌子:

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

【问题讨论】:

    标签: sql count aggregate-functions inner-join


    【解决方案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
    

    这是作业吗?

    【讨论】:

    • 非常感谢,它工作正常!这不是家庭作业,我只是想通过创建简单的数据库来简化我的工作,而且我是这个领域的初学者,所以每个人都可以期待更多像这样的愚蠢问题:))
    【解决方案2】:

    您可以使用内联表:

    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
    

    应该可以。

    【讨论】:

    • 非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 2015-11-25
    • 2012-09-18
    • 2017-07-04
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多