找到最好的价值 - PostgreSQL

时间:2017-11-18 16:58:47

标签: sql postgresql greatest-n-per-group

我生成了以下表格:

  here  | there |      cost
 -------+-------+--------------+
  {1,1} | {1,2} |          0.0 | 
  {1,1} | {2,1} |          0.0 | 
  {1,2} | {1,3} |          1.0 |      
  {2,1} | {2,2} |          1.0 |
  {2,1} | {3,1} |          1.0 |
  {1,2} | {2,2} |          1.0 |      
  {1,3} | {1,4} |          2.0 |       
  {2,2} | {2,3} |          2.0 |       
 ...
  {1,2} | {1,3} |          3.0 |

正如您所看到的,我有两个不同的费用{1,2}, {1,3} 我怎样才能保持每对的最佳价值?

2 个答案:

答案 0 :(得分:1)

此查询将以最低成本返回所有唯一对(此处,那里):

SELECT
    here,
    there,
    MIN(cost)
FROM
    table_name
GROUP BY
    here,
    there;

答案 1 :(得分:0)

如果您要保留整行(包含更多列),请使用DISTINCT ON

SELECT DISTINCT ON (here, there) *
FROM   tbl
ORDER  BY here, there, cost;

相关:

此外,由于您似乎在使用数组(表定义未公开),因此请注意'{1,2}''{2,1}'的不相等。如果您需要将其评估为相等,请将表定义和Postgres版本添加到问题中,然后我将添加解决方案。相关: