如何在不显示所有结果的最大值的情况下为数学运算以及其他元素选择最大值
Posted
技术标签:
【中文标题】如何在不显示所有结果的最大值的情况下为数学运算以及其他元素选择最大值【英文标题】:How can I select the max for a maths operation and also other elements without the max displaying all results 【发布时间】:2021-03-26 01:24:52 【问题描述】:我试图找到某物的最大值,同时还选择其他属性。当我自己执行 max 语句时,它会按预期工作,但是当我选择另一个属性时,它会显示每个属性,就好像 max 语句不存在一样。我如何让它发挥作用?
有效的代码:
select max(contract_end - contract_start)
from contract
返回所有数据的代码,而不仅仅是最大值:
select contract_id, emp_name, job_desc, max(contract_end - contract_start)
from contract join employer on emp_id = contract_client
join job on job_id = contract_job
group by contract_id, emp_name, job_desc
【问题讨论】:
【参考方案1】:按照我的阅读方式,您的查询 - 稍作修改,以便它以 分析 形式使用 MAX
函数 - 完成这项工作吗?
select contract_id,
emp_name,
job_desc,
max(contract_end - contract_start) over (order by null) max_end_start
from contract join employer on emp_id = contract_client
join job on job_id = contract_job
或者,这就是你要找的吗?使用MAX
日期差异作为子查询:
select contract_id,
emp_name,
job_desc,
contract_end - contract_start diff
from contract join employer on emp_id = contract_client
join job on job_id = contract_job
where contract_end - contract_start = (select max(contract_end - contract_start)
from contract
)
【讨论】:
选择了所有 max_end_start 值都设置为最大值的行,我只想要数据最高的一行 我又加了一个例子;看看有没有帮助。【参考方案2】:如果您想要整个表格的最大值,那么只需 order by
和 fetch first
:
select c.contract_id, e.emp_name, j.job_desc,
c.contract_end - c.contract_start as contract_duration
from contract c
inner join employer e on e.emp_id = c.contract_client
inner join job j on j.job_id = c.contract_job
order by contract_duration desc
fetch first row with ties
with ties
允许***别(如果有)。
请注意,我添加了表别名并为所有列添加了它们所属的表的前缀(我做了一些猜测,您可能需要查看)。
fetch
子句在 Oracle 12 中可用。在早期版本中,您可以改用窗口函数:
select *
from (
select c.contract_id, e.emp_name, j.job_desc,
c.contract_end - c.contract_start as contract_duration,
rank() over(order by contract_duration desc) rn
from contract c
inner join employer e on e.emp_id = c.contract_client
inner join job j on j.job_id = c.contract_job
) t
where rn = 1
最后:如果您想要每组的最新行(这不是您的问题所暗示的),那么您可以在rank()
中添加一个partition by
子句,枚举定义的列组。
【讨论】:
当我只想要最高的时候返回多行? @anotherwildeboy:这给出了一行,最大值。如果具有最大值的行不止一行,则它给出多行。尝试查询并自己查看。以上是关于如何在不显示所有结果的最大值的情况下为数学运算以及其他元素选择最大值的主要内容,如果未能解决你的问题,请参考以下文章
当我的搜索字段为空时,如何在不搜索结果的情况下呈现页面,但在搜索时仍然异步呈现?
如何在不单独指定所有列的情况下对所有列的 SQL 结果进行排序?