Sql 返回对应聚合结果的表ID

Sql 返回对应聚合结果的表ID,sql,postgresql,aggregate,min,Sql,Postgresql,Aggregate,Min,我有一张这样的桌子: +-----+------------+-------+--------+ | ID | val1 | val2 | val3 | +-----+------------+-------+--------+ | 100 | 110 | 25 | 530 | | 101 | 56 | 75 | 591 | | 102 | 65 | 93 | 827 | | 103 | 75

我有一张这样的桌子:

+-----+------------+-------+--------+
| ID  |  val1      | val2  | val3   |
+-----+------------+-------+--------+
| 100 |  110       | 25    | 530    |
| 101 |  56        | 75    | 591    |
| 102 |  65        | 93    | 827    |
| 103 |  75        | 70    | 805    |
+-----+------------+-------+--------+
SELECT  t1.ID
FROM Tablename t1
INNER JOIN
(
   SELECT Id, MIN(val3 - val1) Minval
   FROM Tablename
   GROUP BY Id
) t2 ON t1.ID = t2.Id AND t2.minval = (t1.val3 - t1.val1)

我想在postgreSQL中编写一个查询,只要(val3-val1)最小,就为我返回ID。

您可以执行以下操作:

+-----+------------+-------+--------+
| ID  |  val1      | val2  | val3   |
+-----+------------+-------+--------+
| 100 |  110       | 25    | 530    |
| 101 |  56        | 75    | 591    |
| 102 |  65        | 93    | 827    |
| 103 |  75        | 70    | 805    |
+-----+------------+-------+--------+
SELECT  t1.ID
FROM Tablename t1
INNER JOIN
(
   SELECT Id, MIN(val3 - val1) Minval
   FROM Tablename
   GROUP BY Id
) t2 ON t1.ID = t2.Id AND t2.minval = (t1.val3 - t1.val1)

您可以这样做:

+-----+------------+-------+--------+
| ID  |  val1      | val2  | val3   |
+-----+------------+-------+--------+
| 100 |  110       | 25    | 530    |
| 101 |  56        | 75    | 591    |
| 102 |  65        | 93    | 827    |
| 103 |  75        | 70    | 805    |
+-----+------------+-------+--------+
SELECT  t1.ID
FROM Tablename t1
INNER JOIN
(
   SELECT Id, MIN(val3 - val1) Minval
   FROM Tablename
   GROUP BY Id
) t2 ON t1.ID = t2.Id AND t2.minval = (t1.val3 - t1.val1)

您可以使用
orderby

select  id
from    YourTable
order by
        val3 - val1
limit   1

您可以使用
orderby

select  id
from    YourTable
order by
        val3 - val1
limit   1

如果我正确理解了您想要的内容,那么这可以用SQL来表达,非常接近您用文字写的方式


如果多行具有相同的
val1-val3
,则将返回多个结果。如果可能的话,您需要添加额外的条件。

如果我正确理解您的要求,这可以用SQL来表达,非常接近您用文字写的方式


如果多行具有相同的
val1-val3
,则将返回多个结果。如果可能的话,你需要添加额外的标准。

如果
Id
看起来是一个独特的列,
group-by-Id
不会有多大成就?如果
Id
看起来是一个独特的列,
group-by-Id
不会有多大成就?奥马尔,我很好奇,这有什么表现(
orderbyval3-val1
),而不是两列本身(比如,
orderbyval3asc,val1desc
)“当然,我想你需要一个索引才能更好地工作,真的,但是优化器是否足够聪明,能够使用它?”发条缪斯:你不能按列本身排序,那样会返回错误的结果。阿克,不,你是对的。#headdesk#没有完全理解这一点(对于
val1
可能比
val3
大得多的情况,其本身可能会很大)。安德奥马尔,我很好奇,相对于两列本身的排序(比如,
orderbyval3asc,val1desc
),这个(
orderbyval3-val1
)的性能如何“当然,我想你需要一个索引才能更好地工作,真的,但是优化器是否足够聪明,能够使用它?”发条缪斯:你不能按列本身排序,那样会返回错误的结果。阿克,不,你是对的。#headdesk#没有完全理解这一点(对于
val1
可能比
val3
大得多的情况,其本身可能很大)。