ホームページ >データベース >mysql チュートリアル >SQL で同じ「id」の各「パス」の平均値を計算し、「id」ごとに 1 行のデータをピボットするにはどうすればよいですか?

SQL で同じ「id」の各「パス」の平均値を計算し、「id」ごとに 1 行のデータをピボットするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-25 18:09:02505ブラウズ

How can I calculate average values for each 'pass' for the same 'id' and pivot the data for one row per 'id' in SQL?

AVG および GROUP BY を使用した SQL クエリ

SQL では、テーブルからグループ化された平均を抽出する必要がある状況に遭遇することがあります。これは、AVG() 句と GROUP BY 句を使用して実現できます。

テーブルの例を考えてみましょう:

id pass val
DA02959106 5.00 44.40
08A5969201 1.00 182.41
08A5969201 2.00 138.78
DA02882103 5.00 44.73
DA02959106 1.00 186.15
DA02959106 2.00 148.27
DA02959106 3.00 111.91
DA02959106 4.00 76.15
DA02959106 5.00 44.40
DA02959106 4.00 76.65

各パスの平均値の計算

同じ 'id' の各 'pass' の平均値を計算するには、次のクエリを使用します。

<code class="sql">SELECT id, pass, AVG(val) AS val_1
FROM data_r1
GROUP BY id, pass;</code>

このクエリは、'id' と 'pass' の両方で行をグループ化し、各グループの平均「val」。結果は次のようになります:

id pass val_1
DA02959106 1.00 186.15
08A5969201 1.00 182.41
DA02882103 5.00 44.73
08A5969201 2.00 138.78
DA02959106 2.00 148.27
DA02959106 3.00 111.91
DA02959106 4.00 76.40
DA02959106 5.00 44.40

ID ごとに 1 行のデータをピボット

「ID」ごとに 1 行を使用し、複数の列を表す場合各「パス」の平均値を取得するには、次のクエリを使用します。

<code class="sql">SELECT d1.id,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4), 0) FROM data_r1 d2
     WHERE d2.id = d1.id AND pass = 1) as val_1,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4), 0) FROM data_r1 d2
     WHERE d2.id = d1.id AND pass = 2) as val_2,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4), 0) FROM data_r1 d2
     WHERE d2.id = d1.id AND pass = 3) as val_3,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4), 0) FROM data_r1 d2
     WHERE d2.id = d1.id AND pass = 4) as val_4,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4), 0) FROM data_r1 d2
     WHERE d2.id = d1.id AND pass = 5) as val_5,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4), 0) FROM data_r1 d2
     WHERE d2.id = d1.id AND pass = 6) as val_6,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4), 0) FROM data_r1 d2
     WHERE d2.id = d1.id AND pass = 7) as val_7
from data_r1 d1
GROUP BY d1.id;</code>

このクエリは、サブクエリを使用して各「パス」の平均値を抽出し、対応する列に割り当てます。結果のテーブルは次のようになります:

id val_1 val_2 val_3 val_4 val_5 val_6 val_7
DA02959106 186.15 148.27 111.91 76.40 44.40 0 0

以上がSQL で同じ「id」の各「パス」の平均値を計算し、「id」ごとに 1 行のデータをピボットするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。