SQL - 检索查询的关联主键和 MAX(value) 的值
SQL - Retrieve Associated Primary Key and Value of MAX(value) of Query
关于 select 在 table/query 中取最大值,我有一个 SQL 问题。我正在尝试 return 来自聚合表达式的最大值 returned 以及元组的关联主键。
当我只在 select 语句中包含聚合函数时,我能够 return 1 个元组仅显示最大值,但我无法 return 仅显示 1 个元组聚合表达式的主键和最大值。
这是我的查询示例:
SELECT id, MAX(SQRT((POWER((x-(-28)),2) + POWER((y-(151)),2)))) as distance
FROM table
GROUP BY id;
如您所料,这 return 是函数的所有 ID 和关联值。它不 return 只有 1 个具有最大值和关联 ID 的元组。
我该怎么做才能解决这个问题?
一种方法是按表达式降序排序,并且只选择第一行:
select id, distance
from (select id, SQRT((POWER((x-(-28)),2) + POWER((y-(151)),2))) as distance
from table
order by distance desc)
where rownum < 2
从 Oracle 12c 开始,您还可以利用 fetch first n rows
语法来完成同样的事情:
select id, SQRT((POWER((x-(-28)),2) + POWER((y-(151)),2))) as distance
from table
order by distance desc
fetch first row only
如果不止一行共享相同的最大距离值,您还可以方便地调整语法以支持并列:
select id, SQRT((POWER((x-(-28)),2) + POWER((y-(151)),2))) as distance
from table
order by distance desc
fetch first row with ties
关于 select 在 table/query 中取最大值,我有一个 SQL 问题。我正在尝试 return 来自聚合表达式的最大值 returned 以及元组的关联主键。
当我只在 select 语句中包含聚合函数时,我能够 return 1 个元组仅显示最大值,但我无法 return 仅显示 1 个元组聚合表达式的主键和最大值。
这是我的查询示例:
SELECT id, MAX(SQRT((POWER((x-(-28)),2) + POWER((y-(151)),2)))) as distance
FROM table
GROUP BY id;
如您所料,这 return 是函数的所有 ID 和关联值。它不 return 只有 1 个具有最大值和关联 ID 的元组。
我该怎么做才能解决这个问题?
一种方法是按表达式降序排序,并且只选择第一行:
select id, distance
from (select id, SQRT((POWER((x-(-28)),2) + POWER((y-(151)),2))) as distance
from table
order by distance desc)
where rownum < 2
从 Oracle 12c 开始,您还可以利用 fetch first n rows
语法来完成同样的事情:
select id, SQRT((POWER((x-(-28)),2) + POWER((y-(151)),2))) as distance
from table
order by distance desc
fetch first row only
如果不止一行共享相同的最大距离值,您还可以方便地调整语法以支持并列:
select id, SQRT((POWER((x-(-28)),2) + POWER((y-(151)),2))) as distance
from table
order by distance desc
fetch first row with ties