Mysql 从Oracle Apex中的3个表中选择数据

Mysql 从Oracle Apex中的3个表中选择数据,mysql,oracle,select,join,Mysql,Oracle,Select,Join,我有四个表,分别是:dw_位置、dw_时间、dw_犯罪和dw_犯罪事实 dw_位置包含列area_id和area_name dw_time包含time_id和year列。 dw_crime包含crime_type_id和crime_type_desc列 dw_crime_fact包含列report_id、no_of crimes、fk1_time_id作为dw_time的外键、fk2_area_id作为外键dw_location和fk3_crime_type_id作为dw_crime的外键 我想

我有四个表,分别是:dw_位置、dw_时间、dw_犯罪和dw_犯罪事实

dw_位置包含列area_id和area_name

dw_time包含time_id和year列。 dw_crime包含crime_type_id和crime_type_desc列

dw_crime_fact包含列report_id、no_of crimes、fk1_time_id作为dw_time的外键、fk2_area_id作为外键dw_location和fk3_crime_type_id作为dw_crime的外键

我想写的报告之一是每年犯罪率最高的地区

我有下面的代码来连接这些表,我正在努力选择犯罪率最高的地区和年份。 我很确定我必须使用分组,并且有语句,但不确定放在哪里

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年的地区列表。但我想选择犯罪率最高的地区

如果犯罪率最高,你需要更多的细节来说明该怎么做,但希望这样的事情能让你走上正轨:

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;

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

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