从表

时间:2017-08-23 13:05:49

标签: sql postgresql

试验PostgreSQL,但这确实是一个普遍的问题。

鉴于此表:

gps=# select * from sort_test;
 v1 | v2 |  data  
----+----+--------
  1 |  1 | foo 1
  2 |  2 | foo 2
  3 |  0 | foo 3
  4 |  1 | foo 4
  5 |  2 | foo 5
  6 |  0 | foo 6
  7 |  1 | foo 7
  8 |  2 | foo 8
  9 |  0 | foo 9
 10 |  1 | foo 10
(10 rows)

我想要一个最小的组合(v2,v1),即排序v2优先于v1。最简单的方法似乎是将ORDER BYLIMIT

一起使用
gps=# select v2, v1 from sort_test order by v2, v1 limit 1;
 v2 | v1 
----+----
  0 |  3
(1 row)

如果这样做会很好:

gps=# select min(v2, v1) from sort_test ;
ERROR:  function min(numeric, numeric) does not exist
LINE 1: select min(v2, v1) from sort_test ;
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

到目前为止我使用MIN找到的唯一方法是:

gps=# select v2, min(st.v1) from sort_test st where st.v2 = (select min(v2) from sort_test) group by st.v2;
 v2 | min 
----+-----
  0 |   3
(1 row)

是否还有其他使用标准SQL功能的优雅方式? (我不想查看PostgreSQL Composite Types

0 个答案:

没有答案