[英]How to select rows based on unique column
我有值表
ColumnA ColumnB ASD A CSD B DSD C ESD D FSD D GSD D
列A是主鍵,我需要結果為
ColumnA ColumnB ASD A CSD B DSD C ESD D
我想要B列中的所有唯一值及其關聯的第一個值columnA。
我嘗試了幾次查詢並在Google上進行了搜索,但找不到螞蟻解決方案。
謝謝,羅希特。
首先是鍵順序為第一個(即按字母順序)。
SELECT MIN(ColumnA) AS ColumnA, ColumnB
FROM tbl
GROUP BY ColumnB
由於某種原因,您同時標記了MySQL和Oracle。 上面的方法在這兩個方面都適用。
Oracle還具有分析功能,可以幫助您進行這種常規查詢。
select min(columna) columna, columnb
from mytable
group by columnb;
使用分析(Oracle):
SQL> WITH tab AS (
2 SELECT 'ASD' columnA, 'A' columnB FROM DUAL
3 UNION ALL SELECT 'CSD', 'B' FROM DUAL
4 UNION ALL SELECT 'DSD', 'C' FROM DUAL
5 UNION ALL SELECT 'ESD', 'D' FROM DUAL
6 UNION ALL SELECT 'FSD', 'D' FROM DUAL
7 UNION ALL SELECT 'GSD', 'D' FROM DUAL
8 )
9 SELECT columnA, columnB
10 FROM (SELECT columnA, columnB,
11 rank() over(PARTITION BY columnB ORDER BY columnA) rnk
12 FROM tab)
13 WHERE rnk = 1;
COLUMNA COLUMNB
------- -------
ASD A
CSD B
DSD C
ESD D
select min(ColumnA) as ColumnA,ColumnB from table
group by ColumnB
CREATE TABLE #t_Val
(
ColumnA VARCHAR(3) PRIMARY KEY
, ColumnB CHAR(1) NOT NULL
)
INSERT #t_Val
SELECT 'ASD' , 'A'
UNION
SELECT 'CSD' , 'B'
UNION
SELECT 'DSD' , 'C'
UNION
SELECT 'ESD' , 'D'
UNION
SELECT 'FSD' , 'D'
UNION
SELECT 'GSD' , 'D'
SELECT MIN(ColumnA),ColumnB
FROM #t_Val
GROUP BY ColumnB
做相同事情的另一種方式:
SELECT DISTINCT
FIRST_VALUE(ColumnA)
OVER (PARTITION BY ColumnB
ORDER BY ColumnA) AS ColumnA,
ColumnB
FROM tbl
這具有可用於多個列的優點(即,GROUP BY方法不起作用的地方)。
這是解決方案
創建表tbl_test
( col1
varchar(5)整理latin1_general_ci NOT NULL, col2
varchar(5)整理latin1_general_ci NOT NULL,主鍵( col1
))ENGINE = MyISAM DEFAULT CHARSET = latin1 COLLATE = latin1_general_ci;
插入tbl_test
VALUES('ASD','A'); 插入tbl_test
VALUES('CSD','B'); 插入tbl_test
VALUES('DSD','C'); 插入tbl_test
值('ESD','D'); 插入tbl_test
VALUES('FSD','D'); 插入tbl_test
VALUES('GSD','D');
SELECT DISTINCT(col2),col1來自tbl_test GROUP BY col2 LIMIT 0,30;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.