Postgres: Distinct query results¶
The distinct_on argument¶
You can fetch rows with only distinct values of a column using the distinct_on argument.
It is typically recommended to use order_by along with distinct_on to ensure we get predictable results
(otherwise any arbitrary row with a distinct value of the column may be returned).
Note that the distinct_on column needs to be the first column in the order_by expression.
See sort queries for more info on using order_by.
employees (
  distinct_on: [employees_select_column]
  order_by: [employees_order_by]
): [employees]!
# select column enum type for "employees" table
enum employees_select_column {
  id
  name
  department
  salary
}
You can see the complete specification of the distinct_on argument in the API reference.
Fetch results with distinct values of a particular field¶
For example, fetch the employee with the highest salary from each department:
query {
  employees (
    distinct_on: [department]
    order_by: [
      {department: asc},
      {salary: desc}
    ]
  ) {
    id
    name
    department
    salary
  }
}
query {
  employees (
    distinct_on: [department]
    order_by: [
      {department: asc},
      {salary: desc}
    ]
  ) {
    id
    name
    department
    salary
  }
}
{
  "data": {
    "employees": [
      {
        "id": 5,
        "name": "Kamila",
        "department": "Engineering",
        "salary": 4325
      },
      {
        "id": 4,
        "name": "Damien",
        "department": "Product",
        "salary": 3124
      },
      {
        "id": 7,
        "name": "Rickard",
        "department": "Services",
        "salary": 2223
      }
    ]
  }
}
