我想从每个组中获得前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.

Sql相关问答推荐

如何解决Error:operator is not unique:unknown—unknown在一个动态SQL查询?""""

Group By子句返回太多行

查询多个表并返回合并在联合列上的所有表中的所有行

检索上一个星期四和上一个星期三

带上最后日期(结果)

Postgres jsonpath运算符的变量替换,如_regex?

使用特定的Order By子句随机化SQL输出

在 PostgreSQL 中使用 ltree 列进行累积

按二维数组的第一个元素排序

统计重复记录的总数

Clickhouse:左连接表到外部数组

Postgres存在限制问题「小值」

如何使用SQL将患者平均分配给他们所在地区的doctor

如何获取每个组中最近的n条记录并将它们聚合成数组

检索具有相同位置的最小和最大store 数量

joins 组合多个重复数据删除策略

String_Split 多列

将单行中的多个行值转换为列

从多个连接返回 1 行到同一个表 - SQL Server

当我按 PK 分组时,该表中的所有列在每个组中都具有相同的值.那么为什么 SQL Server 需要对这些列进行聚合呢?