如何根据唯一列选择行

时间:2010-07-21 14:25:54

标签: sql mysql oracle

我的表格值为

    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列和B列中的所有唯一值他们关联的第一个值columnA。

我尝试了几个查询&看着谷歌,却找不到蚂蚁解决方案。

谢谢, 罗希特夏尔。

7 个答案:

答案 0 :(得分:3)

首先是关键顺序的第一个(即按字母顺序排列)。

SELECT MIN(ColumnA) AS ColumnA, ColumnB
FROM tbl
GROUP BY ColumnB

您出于某种原因标记了MySQL和Oracle。以上内容适用于两者。

Oracle还具有分析功能,可以帮助this general type查询。

答案 1 :(得分:2)

select min(columna) columna, columnb
from mytable
group by columnb;

答案 2 :(得分:2)

使用分析(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

答案 3 :(得分:0)

select min(ColumnA) as ColumnA,ColumnB from table
group by ColumnB

答案 4 :(得分:0)

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

答案 5 :(得分:0)

另一种做同样事情的方式:

SELECT DISTINCT
    FIRST_VALUE(ColumnA)
    OVER (PARTITION BY ColumnB
          ORDER BY ColumnA) AS ColumnA,
    ColumnB
FROM tbl

这样做的好处是可以使用多个列(即GROUP BY方法不起作用的地方)。

答案 6 :(得分:0)

这是解决方案

CREATE TABLE 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;

INSERT INTO tbl_test VALUES('ASD','A'); 插入tbl_test VALUES('CSD','B'); 插入tbl_test VALUES('DSD','C'); 插入tbl_test VALUES('ESD','D'); 插入tbl_test VALUES('FSD','D'); 插入tbl_test VALUES('GSD','D');


SELECT DISTINCT( COL2 ),col1 从tbl_test GROUP BY col2 限制0,30;