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
大得多的情况,其本身可能很大)。