ホームページ >データベース >mysql チュートリアル >SQL で同じ「id」の各「パス」の平均値を計算し、「id」ごとに 1 行のデータをピボットするにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。