ホームページ > データベース > mysql チュートリアル > リストされているすべてのテストに合格した車を見つけるにはどうすればよいですか?

リストされているすべてのテストに合格した車を見つけるにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-14 10:40:43
オリジナル
937 人が閲覧しました

How Can I Find Cars That Passed All Listed Tests?

テストリストからすべてのテストに合格した車両を検索します

このタスクでは、「passedtest」テーブルにリストされているすべてのテストに合格した車両を「cars」テーブルから特定する必要があります。単純な IN ステートメントで任意の 1 つのテストに合格した自動車を取得できますが、要件は、各自動車がリスト内のすべて のテストに合格したことを確認することです。

これを達成するには、集計 (GROUP BY、HAVING) と集合論を組み合わせて使用​​できます。

解決策:

<code class="language-sql">SELECT carname
FROM PassedTest
GROUP BY carname
HAVING COUNT(DISTINCT testtype) = (SELECT COUNT(*) FROM PassedTest GROUP BY carname);</code>
ログイン後にコピー

説明:

  • サブクエリ (SELECT COUNT(*) FROM PassedTest GROUP BY carname) は、車ごとの一意のテストの合計数を返します。
  • HAVING COUNT(DISTINCT testtype) = (SELECT COUNT(*) FROM PassedTest GROUP BY carname) 条件は、自動車のさまざまなテスト タイプの数がテストの総数と等しいかどうかをチェックし、自動車がすべてのテストに合格していることを確認します。テスト。

「cars」テーブルのデータを含めるには、次の内部ステートメントを使用できます。

<code class="language-sql">SELECT *
FROM cars
WHERE carname IN (
    SELECT carname
    FROM PassedTest
    GROUP BY carname
    HAVING COUNT(DISTINCT testtype) = (SELECT COUNT(*) FROM PassedTest GROUP BY carname)
);</code>
ログイン後にコピー

代替:

もう 1 つのオプションは、JOIN 操作を使用することです:

<code class="language-sql">SELECT DISTINCT c.carname
FROM cars c
JOIN PassedTest pt ON c.carname = pt.carname
GROUP BY c.carname
HAVING COUNT(*) = (SELECT COUNT(*) FROM PassedTest GROUP BY carname);</code>
ログイン後にコピー

以上がリストされているすべてのテストに合格した車を見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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