喂, 我有桌子(见下图),有4条记录。请注意,ColumnA和ColumnB具有相同的值,ColumnC和columnD将具有不同的值。
ColumnA ColumnB ColumnC ColumnD
------- ------- ------- -------
xx yy AAA 333
xx yy BBB 555
xx yy AAA 333
xx yy BBB 555
我试图使用Group By查询选择整个记录,如下所示:
SELECT ColumnC from TableA GROUP BY ColumnC;
此查询仅向我显示ColumnC,但我的期望是不仅选择整个记录ColumnC。
更新:我的预期输出是:
ColumnA ColumnB ColumnC ColumnD
------- ------- ------- -------
xx yy AAA 333
xx yy BBB 555
我可以知道我该怎么做?
谢谢@!
答案 0 :(得分:4)
您可以将所有列放在SELECT和GROUP BY子句中:
SELECT
ColumnA, ColumnB, ColumnC, ColumnD
FROM
TableA
GROUP BY
ColumnA, ColumnB, ColumnC, ColumnD
这基本上等同于
SELECT DISTINCT
*
FROM
TableA
但更明确。正如OMG Ponies所指出的,语法可以在DBMS之间变化。在某些情况下,您可以简单地做:
SELECT * FROM TableA GROUP BY ColumnC
答案 1 :(得分:2)
在Oracle中:
SELECT *
FROM (
SELECT t.*,
ROW_NUMBER() OVER (PARTITION BY columnC ORDER BY columnA) AS rn
FROM mytable
)
WHERE rn = 1
更改ORDER BY
子句以控制将返回包含重复项的记录(现在columnA
的值最小)。
答案 2 :(得分:1)
如果您使用的是MS SQL,以下内容可以满足您的需求:SELECT ColumnC,* from TableA GROUP BY ColumnC;
select ColumnC, TableA.* from TableA GROUP BY COLUMNC;
会帮助你。
答案 3 :(得分:0)
SELECT * from TableA GROUP BY ColumnC;
答案 4 :(得分:0)
您可能希望选择所有列,然后需要将列C排在第一位: SELECT * FROM TableA GROUP BY ColumnC,ColumnA,ColumnB,ColumnD