1. ホーム
  2. sql

[解決済み] SQL/mysql - Select distinct/UNIQUE but return all column?

2022-03-22 21:47:30

質問

SELECT DISTINCT field1, field2, field3, ......   FROM table

次のようなSQL文を作成しようとしていますが、すべての列を返したいのですが、可能でしょうか?このようなものです。

SELECT DISTINCT field1, * from table

解決方法は?

グループ名で検索していますね。

select *
from table
group by field1

これは、時折、はっきりとしたon文で書くことができます。

select distinct on field1 *
from table

しかし、ほとんどのプラットフォームでは、他のカラムに関する動作が指定されていないため、上記のどちらも動作しません。(最初のものは、もしあなたが使っているものがMySQLであれば、動作します)。

異なるフィールドをフェッチして、毎回任意の1行を選択することにこだわることもできます。

いくつかのプラットフォーム(PostgreSQL、Oracle、T-SQLなど)では、ウィンドウ関数を使って直接これを行うことができます。

select *
from (
   select *,
          row_number() over (partition by field1 order by field2) as row_number
   from table
   ) as rows
where row_number = 1

他のもの(MySQL、SQLite)では、テーブル全体を自分自身と結合させるようなサブクエリを書く必要があります( というように、あまりお勧めできません。