我试图弄清楚如何返回一些值,此外,还有几个值需要被指示为最频繁/常见。我将所有这些值存储在几个表中,需要将这些表相互连接。以下是我目前的陈述:
Select distinct
W.name,
D.prprty,
D.sequence_number,
D.item_num,
f.grade,
f.od_inch,
count(F.od_inch) over (partition by F.prprty, F.sequence_number) as od_count,
count(f.grade) over (partition by F.prprty, F.sequence_number) as grade_count
FROM table D,
table W,
table F
where D.prprty = W.prprty
and w.prprty = F.prprty
and W.prprty =7000
order by sequence_number, od_count desc, grade_count desc
每个属性的值如下所示:
- 房产x*
序号:1,物料编号:1,等级:10,外径_英寸:2
序号:1,物料编号:2,等级:1,外径_英寸:2
序号:1,项目号:3,等级:10,外径_英寸:1
序号:2,项目号:1,等级:10,外径_英寸:2
序号:2,项目编号:2,等级:10,外径_英寸:5
序号:3,项目号:1,等级:5,外径_英寸:2
目标是返回序列号以及该特定序列号的最常用坡率值和OD_inch值,而不管有多少个项目。
目标:
序列1:最常见等级:10、Most_common_od:2
序列2:最常见等级:10、Most_common_od:2
序列3:最常见等级:5、Most_common_od:2
我需要对现有的查询做些什么来确保它只提取每个序列号一次,并且是最常见的值?
4条答案
按热度按时间35g0bw711#
简化,假设只涉及一个表:
property
:此选项需要几个步骤(阅读代码中的注解):计算每个
GRADE
和OD_INCH
的行数,然后按降序排序,最后返回排名最高的行数。注意
row_number
只返回一行;对于seq = 2
,od_inch = 2
和5
都排名为“最高”(因为它们每个出现一次),但是-似乎你希望在最终结果中只得到一个。如果改变主意,请改用rank
解析函数。那你会怎么做使用当前查询作为CTE(在我的示例中是
temp
),对行进行排名并获取排名最高的行。nkoocmlb2#
这会给予你分数
现在我们可以求出这些项的max
您可以对od_inch执行相同的操作
将它们结合在一起,以获得您的结果:
tzxcd3kk3#
您可以使用查询,然后使用
COUNT(*) OVER (PARTITION BY sequence_number, od_count)
的分析函数来查找每个sequence_number
的od_counts
的频率,然后使用RANK
分析函数按该值进行排名,并使用FETCH FIRST ROW WITH TIES
查找排名最高的行:pinkon5k4#
张贴答案,因为我尝试了所有其他建议的解决方案,他们不太工作。也许是数据集或操作员错误,但这是提供最佳结果的解决方案(此外,请原谅语法问题... Oracle SQL不是我最强的语言,我也不是一个铁杆的编码员):
1.1、1、2、3、4、5、6、7、8、10、11、12、13、14、15、15、16、16、17、18、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19、19
选择
D. prprty,
D.序列号,
stats_mode(F. od_inch)as Most_Common_OD_Inch**(stats_mode是一个巨大的突破,因为否则会返回多行)***
来自表D、表F
在哪里D. prprty!= 0
且D. prprty = F. prprty
按D. prprty,D. Sequence_number分组
order by D.序列号
)
选择
W. prprty,
CTE1.sequence_number,
CTE1.Most_Common_Grade,
CTE1.Most_Common_OD_英寸
来自表W,cte1
其中w. prprty = cte1.prprty
按cte1.prprty,CTE1.sequence_number排序