sql - 从每个组中选择 1 行匹配或后备

标签 sql postgresql select

使用 PostgreSQL 9.6,如何从这样的数据中获取 I:

group | foo | value
------+-----+------
1     | A   | a
1     | B   | b
1     | C   | c
2     | B   | b2
2     | A   | a2
3     | B   | b3
3     | C   | c3

每个 group 一行,这样:

  • 如果有 foo = A 的行,取它,
  • 否则从该组中取出任何行?

示例输出:

group | foo | value
------+-----+------
1     | A   | a
2     | A   | a2
3     | B   | b3 <- chosen one row from group 3

最佳答案

t=# select distinct on ("group") "group", foo, value 
from table
order by "group", foo = 'A' DESC;
 group  |  foo  | value
--------+-------+-------
 1      |  A    |  a
 2      |  B    |  b2
 3      |  B    |  b3
(3 rows)

我认为neatest将是 DISTINCT ON

关于sql - 从每个组中选择 1 行匹配或后备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50504974/

相关文章:

database - 我应该对我的 postgres 表进行分区吗?

json - Postgres 选择 JSON 字段不为空的位置

mysql - 在 MySql 中查找所选项目数量的最快方法?

sql - 从另一个存储过程动态调用一个存储过程

postgresql - 在查询中获取最高价和最低价以及卖家

ruby-on-rails - 如何使用 PostgreSQL 强制 ActiveRecord 中的主键从特定整数值开始跳转?

mysql - 如何使用 group by (MySQL) 查找中值

mysql - 用另一个表的列更新一个表的一列(一对多关系)

php - PHP MYSQL 中的 SQL 语句排序

MySQL - 在多个没有关系的表上使用 FIND_IN_SET