我想从每个组中获得前1名,但不是通过PK,所以我必须使用DISTINCT ON.但在squirrel library中没有函数DISTINCT,只有DISTINCT没有参数.那么,如果我想使用这个图书馆,我应该怎么做呢?
我try 过在SELECT之前插入参数的函数Prefix. 我希望是这样的:
select distinct on (name, age) name, age, city from people where name='John'
我想从每个组中获得前1名,但不是通过PK,所以我必须使用DISTINCT ON.但在squirrel library中没有函数DISTINCT,只有DISTINCT没有参数.那么,如果我想使用这个图书馆,我应该怎么做呢?
我try 过在SELECT之前插入参数的函数Prefix. 我希望是这样的:
select distinct on (name, age) name, age, city from people where name='John'
issue #42"DISTINCT ON(仅限Postgres)"中的This comment提示使用Options
方法.
使用它,我们可以获得所需的SQL语句-程序
package main
import (
"fmt"
sq "github.com/Masterminds/squirrel"
)
type People struct {
Name string
Age int
City string
}
func main() {
query := sq.Select("name", "age", "city").
Options("DISTINCT ON (name, age)").
From("people").
Where(sq.Eq{"name": "John"})
fmt.Println(query.ToSql())
}
Prints:
SELECT DISTINCT ON (name, age) name, age, city FROM people WHERE name = ? [John] <nil>
which looks sort of what was expected.