簡體   English   中英

如何根據唯一列選擇行

[英]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_testcol1 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM