MySQL での CASE ステートメントの使用を最適化する
P粉463840170
P粉463840170 2023-09-04 18:42:48
0
2
499

皆さん、こんにちは。

上のスクリーンショットに示すようなテーブルがあります。 CASE ステートメントを使用してクエリを作成し、必要な追加の列を返すようにしました。私が書いたクエリは次のとおりです:

SELECT *、 CASE WHEN (SUM(CASE WHEN class = 'クラス 1' THEN 1 END) OVER(PARTITION BY Student_id)) >= 1 THEN 1 ELSE 0 END AS 'クラス 1'、 CASE WHEN (SUM(CASE WHEN class = 'クラス 2' THEN 1 END) OVER(PARTITION BY Student_id)) >= 1 THEN 1 ELSE 0 END AS 'クラス 2'、 CASE WHEN (SUM(CASE WHEN class = 'クラス 3' THEN 1 END) OVER(PARTITION BY Student_id)) >= 1 THEN 1 ELSE 0 END AS 'クラス 3'、 CASE WHEN (SUM(CASE WHEN class = 'クラス 4' THEN 1 END) OVER(PARTITION BY Student_id)) >= 1 THEN 1 ELSE 0 END AS 'クラス 4' Qa;
から

これは私が得た結果の表です:

このクエリで実現したいのは、学生がコースに参加した場合、その学生に属するすべての行のクラス列の下に 1 が表示されることです。

たとえば、student_id 2 を持つ生徒はクラス 1 に属しているため、クラス 1< に属します。 ;/code> 列の下の student_id 2 の両方の行は 1 となります。

クエリで必要なことは達成できましたが、1 を使用する代わりに、クラスの enrollment_date にしたいと考えています。これが私が望む最終的な出力です:

上のスクリーンショットの最終出力を取得するには、クエリをどのように変更すればよいか教えていただけますか?

2 番目の質問:

上記のクエリでわかるように、各クラスには、そのクラスの列を作成するための個別の CASE ステートメントがあります。ただし、将来的にはクラスが 5、6、7、... になる可能性があるため、別の新しいクラスが存在するたびに、もう一度 CASE ステートメントを追加する必要があります。とにかく、クエリを最適化して、4 つの異なるクラスに対して 4 つの CASE ステートメントを使用する必要がなく、それでも (新しいクラスがある場合に) 異なるクラスの列を作成できるようにすることはできますか? 、新しい列)クラスも追加されます)?

サンプルデータ

テーブル qa を作成( Student_id INT、 クラス varchar(20)、 class_end_date 日付、 登録日の日付 ); QA に挿入 (student_id、class、class_end_date、enrollment_date) 価値観 (1、「クラス 1」、「2022-03-03」、「2022-02-14」)、 (1、「クラス 3」、「2022-06-13」、「2022-04-12」)、 (1、「クラス 4」、「2022-07-03」、「2022-06-19」)、 (2、「クラス 1」、「2023-03-03」、「2022-07-14」)、 (2、「クラス 2」、「2022-08-03」、「2022-07-17」)、 (4、「クラス 4」、「2023-03-03」、「2022-012-14」)、 (4、「クラス 2」、「2022-04-03」、「2022-03-21」) ;

P粉463840170
P粉463840170

全員に返信 (2)
P粉670107661

テーブル定義とデータに基づいてクエリを生成し、[オプションで] 実行するストアド プロシージャについては、Pivotを参照してください。

いいねを押す+0
    P粉785522400

    これは、class_end_date と enrollment_date の両方を含む例です -

    リーリー
    いいねを押す+0
      最新のダウンロード
      詳細>
      ウェブエフェクト
      公式サイト
      サイト素材
      フロントエンドテンプレート
      私たちについて 免責事項 Sitemap
      PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!