Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用不同的表计算SQL查询中的中值_Sql_Oracle_Median - Fatal编程技术网

使用不同的表计算SQL查询中的中值

使用不同的表计算SQL查询中的中值,sql,oracle,median,Sql,Oracle,Median,我必须计算(Oracle)一些人的年龄中位数,但要得到年龄,我必须在不同的表格中搜索,因此为其他问题提供的解决方案对我没有帮助 我有4个表,我必须加入其中,以获得所选人员的年龄,然后计算中位数 获取年龄的查询如下所示: select p.year_born from patient p where p.id in ( select distinct md.patient_id from main_data md, treatment t, patient p, consultation c wh

我必须计算(Oracle)一些人的年龄中位数,但要得到年龄,我必须在不同的表格中搜索,因此为其他问题提供的解决方案对我没有帮助

我有4个表,我必须加入其中,以获得所选人员的年龄,然后计算中位数

获取年龄的查询如下所示:

select p.year_born from patient p
where p.id in (
select distinct md.patient_id
from main_data md, treatment t, patient p, consultation c
where 1 = 1
and t.md_id = md.id 
and md.type = 'SOME_TYPE'
and c.id = p.consultation_id
and md.deleted = 0
and t.deleted = 0
and md.completed = 1
and md.patient_id = p.id
and c.testconsultation = 0);
我如何计算这些人出生年份的中位数?

试试这个查询:

WITH 
t1 as  (SELECT year_born FROM (select TO_NUMBER(p.year_born) year_born from patient p
       where p.id in (
       select distinct md.patient_id
       from main_data md, treatment t, patient p, consultation c
       where 1 = 1
       and t.md_id = md.id 
       and md.type = 'SOME_TYPE'
       and c.id = p.consultation_id
       and md.deleted = 0
       and MLP.deleted = 0
       and md.completed = 1
       and md.patient_id = p.id
       and c.testconsultation = 0)) order by year_born),
t2 as (SELECT mod(count(year_born),2) as mod_num,count(year_born) as num FROM t1),
t3 as (SELECT ROWNUM r,t1.* FROM t1),
t4 as (SELECT CASE WHEN mod_num = 1 then round(num/2) else -1 end as t4_num FROM t2)
SELECT CASE WHEN t4.t4_num = -1 then ((SELECT year_born FROM t3 where r = (t2.num/2)) +
(SELECT year_born FROM t3 where r = (t2.num/2) + 1)) / 2 ELSE (SELECT year_born FROM t3 where r = t4_num) end as final_num
FROM t4,t2;
请尝试以下查询:

WITH 
t1 as  (SELECT year_born FROM (select TO_NUMBER(p.year_born) year_born from patient p
       where p.id in (
       select distinct md.patient_id
       from main_data md, treatment t, patient p, consultation c
       where 1 = 1
       and t.md_id = md.id 
       and md.type = 'SOME_TYPE'
       and c.id = p.consultation_id
       and md.deleted = 0
       and MLP.deleted = 0
       and md.completed = 1
       and md.patient_id = p.id
       and c.testconsultation = 0)) order by year_born),
t2 as (SELECT mod(count(year_born),2) as mod_num,count(year_born) as num FROM t1),
t3 as (SELECT ROWNUM r,t1.* FROM t1),
t4 as (SELECT CASE WHEN mod_num = 1 then round(num/2) else -1 end as t4_num FROM t2)
SELECT CASE WHEN t4.t4_num = -1 then ((SELECT year_born FROM t3 where r = (t2.num/2)) +
(SELECT year_born FROM t3 where r = (t2.num/2) + 1)) / 2 ELSE (SELECT year_born FROM t3 where r = t4_num) end as final_num
FROM t4,t2;

答案很简单:

select median (2014 - p.year_born) from patient p
where p.id in (
select distinct md.patient_id
from main_data md, treatment t, patient p, consultation c
where 1 = 1
and t.md_id = md.id 
and md.type = 'SOME_TYPE'
and c.id = p.consultation_id
and md.deleted = 0
and t.deleted = 0
and md.completed = 1
and md.patient_id = p.id
and c.testconsultation = 0);

我应该在询问之前阅读Oracle文档…

答案很简单:

select median (2014 - p.year_born) from patient p
where p.id in (
select distinct md.patient_id
from main_data md, treatment t, patient p, consultation c
where 1 = 1
and t.md_id = md.id 
and md.type = 'SOME_TYPE'
and c.id = p.consultation_id
and md.deleted = 0
and t.deleted = 0
and md.completed = 1
and md.patient_id = p.id
and c.testconsultation = 0);

我应该先阅读Oracle文档,然后再询问……

这与我使用Java获得的结果相匹配,但与使用Oracle Median()获得的结果不匹配。。。这是非常奇怪的…我确信这个查询返回
media
我的朋友,只是可能是因为排序问题发生了。我现在更改了查询。这与我使用Java获得的结果相匹配,但与使用Oracle media()获得的结果不匹配。。。这是非常奇怪的…我确信这个查询返回
median
my friend,只是可能是因为排序问题发生了。我现在将查询更改为+1以读取文档:)。+1以读取文档:)。