sql - SQL DISTINCT 基于单个列,但保留所有列作为输出
问题描述
--mytable
col1 col2 col3
1 A red
2 A green
3 B purple
4 C blue
让我们调用上面的表格mytable
。我只想从中选择不同的值col2
:
SELECT DISTINCT
col2
FROM
mytable
当我这样做时,输出看起来像这样,这是预期的:
col2
A
B
C
但是如何执行相同类型的查询,但保留所有列?输出如下所示。本质上,我正在mytable
查看col2
,当多次出现时,col2
我只保留第一行。
col1 col2 col3
1 A red
3 B purple
4 C blue
SQL 函数(例如DISTINCT
)是否有我可以设置的参数?我可以想象它类似于KeepAllColumns = TRUE
这个 DISTINCT 函数?还是我需要执行JOIN
s 才能得到我想要的?
解决方案
您可以使用窗口函数,特别是row_number()
:
select t.*
from (select t.*, row_number() over (partition by col2 order by col2) as seqnum
from mytable t
) t
where seqnum = 1;
row_number()
枚举行,从“1”开始。您可以控制是否获取最旧、最早、最大、最小的 . . .
推荐阅读
- python - Python 脚本在 VSC 中有效,但在手动启动时无效
- r - R中的优化,对优化参数的总和和类型有约束
- python - 在python的for循环中关闭图形
- python - PyCharm 样式的文档字符串,包含带有 `>>>` 的代码
- node.js - 在 typescript 节点项目中使用 monorepo 样式测试目录时,ts-jest 找不到类型信息
- windows - 线程的上下文保存在哪里,是否可以通过编程方式访问(无需修改内核)?
- printing - 带有 Zebra ZM600 的 Ghostscript
- debugging - Firefox 调试,从智能手机上的台式电脑打开 localhost
- python - 在 TKinter GUI 中使用线程
- python - 将三个列表与概率进行比较并定义 argmax 规则