试验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 BY
与LIMIT
:
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。