【问题标题】:Selecting Data from 3 tables in Oracle Apex从 Oracle Apex 中的 3 个表中选择数据
【发布时间】:2014-01-01 15:21:16
【问题描述】:

我有四个表:dw_location、dw_time、dw_crime 和 dw_crime_fact

dw_location 包含 area_idarea_name 列。

dw_time 包含列 time_id 和 year。 dw_crime 包含 crime_type_idcrime_type_desc 列。

dw_crime_fact 包含列 report_id、no_of crimesfk1_time_id 作为来自 dw_time 的 外键fk2_area_id 作为外键 dw_locationfk3_crime_type_id 作为来自 dw_crime 的外键。 p>

我想要制作的报告之一是每年犯罪率最高的地区。

我有以下用于连接表格的代码,我正在努力选择犯罪次数最多的地区和年份。 我很确定我必须使用 GROUP BYHAVING 语句,但不确定将它们放在哪里。

SELECT dw_time.year, dw_location.area_desc, 
FROM dw_crime_fact
INNER JOIN dw_time ON dw_time.time_id=dw_crime_fact.fk1_time_id
INNER JOIN dw_location ON dw_location.area_id=dw_crime_fact.fk2_area_id
AND FK1_TIME_ID = '1'

上面的代码列出了 2009 年的地区列表。但我想选择犯罪率最高的地区。

【问题讨论】:

    标签: mysql oracle select join


    【解决方案1】:

    您需要更多详细信息,了解在最高犯罪率等情况下该怎么做,但希望这样的事情能让您走上正轨:

    with data as (
        select 2009 year, 'A' area_desc, 3 no_of_crimes from dual union all
        select 2009 year, 'A' area_desc, 2 no_of_crimes from dual union all
        select 2009 year, 'B' area_desc, 1 no_of_crimes from dual union all
        select 2009 year, 'C' area_desc, 7 no_of_crimes from dual union all
        select 2009 year, 'D' area_desc, 3 no_of_crimes from dual union all
        select 2009 year, 'D' area_desc, 5 no_of_crimes from dual union all
        select 2009 year, 'E' area_desc, 6 no_of_crimes from dual
    )
    select year, area_desc, tot_crimes
    from (
        select
               year,
               area_desc,
               sum(no_of_crimes) tot_crimes,
               rank() over (partition by year order by sum(no_of_crimes) desc) rnk  
        from data
        group by year, area_desc
    )
    where rnk = 1;
    

    【讨论】:

      【解决方案2】:

      如果这就是你要找的,请告诉我。

      SELECT dw_time.year, dw_location.area_desc, no_of crimes
      FROM dw_crime_fact
      INNER JOIN dw_time ON dw_time.time_id=dw_crime_fact.fk1_time_id
      INNER JOIN dw_location ON dw_location.area_id=dw_crime_fact.fk2_area_id
      AND FK1_TIME_ID = '1'
      order by dw_crime_fact.no_of_crimes desc
      limit 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-01
        • 1970-01-01
        • 2021-12-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多