mysql - 用于按 2 列分组并获取第 3 列的第一次出现的 SQL 查询
问题描述
我不擅长 SQL 查询,所以我想我会在这里问。我有一张桌子my_table
:
注意:将所有列视为字符串。为了更好地理解,我在这里将它们表示为数字。
A B C
-----
1 2 3
2 2 3
2 5 6
3 5 6
我希望结果是——
A B C
-----
1 2 3
2 5 6
所以基本上,删除重复对B, C
,并A
为那对B, C
.
解决方案
首先,您最好在这里发布一些您尝试过的东西。
在mysql 8.0
你可以row_number() over (partition by B, C order by A)
用来解决这个问题。
CREATE TABLE Table1 (`A` int, `B` int, `C` int) ; INSERT INTO Table1 (`A`, `B`, `C`) VALUES (1, 2, 3), (2, 2, 3), (2, 5, 6), (3, 5, 6) ;
select `A`, `B`, `C` from ( select *,row_number() over (partition by `B`, `C` order by `A`) rnk from Table1 ) T where rnk = 1;
一个 | 乙| C -: | -: | -: 1 | 2 | 3 2 | 5 | 6
db<>在这里摆弄
如果mysql < 8.0
您可以在 MySQL 中遵循此答案ROW_NUMBER()
更新 :
如果像@forpas 说的:taking the first occurrence of A for that pair of B, C is not solved by order by A.
您必须先对 rownum 进行排序:
CREATE TABLE Table1 (`A` int, `B` int, `C` int) ; INSERT INTO Table1 (`A`, `B`, `C`) VALUES (2, 2, 3), (1, 2, 3), (2, 5, 6), (3, 5, 6) ;
SET @rownum:=0; select `A`, `B`, `C` from ( select *,row_number() over (partition by `B`, `C` order by rownum) rnk from ( select *,@rownum:=@rownum+1 AS rownum from Table1 ) T ) T where rnk = 1;
✓ 一个 | 乙| C -: | -: | -: 2 | 2 | 3 2 | 5 | 6
db<>在这里摆弄
推荐阅读
- tensorflow - 为什么一个简单的操作会在 TensorFlow 上占用这么多内存?
- bash - 在 bash 脚本的变量中获取 kubectl 命令错误消息
- python - 在 django 中重定向后无法访问 cookie
- php - 在使用带有参数Css的where条件后在laravel中不起作用
- google-chrome-os - 如何在 Chrome 操作系统上安装 Neo2?
- python - 从多个数据框python创建JSON
- r - 基于标识符提取图形并在 igraph 中计算网络度量
- ios - 添加布局约束后应用程序崩溃
- haskell-stack - 如何安装`runhaskell`
- azure - 在 Web 应用程序中安装 azure 文件共享时,出现 InvalidCredentials 状态