ホームページ > データベース > mysql チュートリアル > すべての列を保持したまま特定の列から個別の値を選択するにはどうすればよいですか?

すべての列を保持したまま特定の列から個別の値を選択するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-18 20:52:12
オリジナル
455 人が閲覧しました

How to Select Distinct Values from Specific Columns While Keeping All Columns?

すべての列を保持しながら一意の列値を取得する

課題は、出力内のすべての列を保持しながら、特定の列 (field1field2 など) から一意の値を選択することにあります。 単純に SELECT DISTINCT field1, * FROM table を使用することは、曖昧さが生じるため無効です。

効果的な解決策:

1. GROUP BY アプローチ:

GROUP BY 句は解決策を提供します:

<code class="language-sql">SELECT *
FROM table
GROUP BY field1;</code>
ログイン後にコピー

これにより、同一の field1 値に基づいて行がグループ化され、一意の field1 値のみが得られます。ただし、このメソッドは、SELECT ステートメントと GROUP BY 句に明示的に含まれていない限り、他の列で予測できない結果を引き起こす可能性があることに注意してください。

2. (データベース固有) の活用:DISTINCT ON

一部のデータベース システム (すべてではありません) は

をサポートしており、すべての列を保持しながら指定された列を一意に選択できます。DISTINCT ON

<code class="language-sql">SELECT DISTINCT ON (field1) *
FROM table;</code>
ログイン後にコピー

の正確な動作はデータベース プラットフォームによって異なる可能性があることに注意してください。DISTINCT ON

3.ウィンドウ関数の利用 (PostgreSQL、Oracle、T-SQL など):

ウィンドウ関数をサポートするデータベース (PostgreSQL、Oracle、T-SQL など) は、堅牢なソリューションを提供します。

<code class="language-sql">SELECT *
FROM (
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY field1 ORDER BY field2) AS row_number
    FROM table
) AS rows
WHERE row_number = 1;</code>
ログイン後にコピー
このアプローチでは、各パーティション (

で定義) 内の行番号を field1 の順序で割り当てます。最終結果には field2 を含む行のみが含まれ、すべての列を保持しながら一意の row_number = 1 値を効果的に選択します。field1

4.サブクエリと自己結合 (MySQL、SQLite など):

ウィンドウ関数が欠如しているデータベース (MySQL、SQLite など) の場合、サブクエリと自己結合の組み合わせが実行可能な代替手段となります。

<code class="language-sql">SELECT t.*
FROM table t
WHERE (field1, field2, ...) IN (
    SELECT DISTINCT (field1, field2, ...)
    FROM table
);</code>
ログイン後にコピー
これは、

field1 などの組み合わせがテーブル内で一意である行を選択します。 特定のニーズに合わせて field2 句内の列リストを必ず調整してください。IN

以上がすべての列を保持したまま特定の列から個別の値を選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート