「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 列の値が不明な場合に MySQL で動的クロス集計表を作成する方法

列の値が不明な場合に MySQL で動的クロス集計表を作成する方法

2024 年 11 月 8 日に公開
ブラウズ:490

How to Create a Dynamic Cross Tabulation in MySQL When Column Values are Unknown?

MySQL の動的クロス集計

特定の列に未知の数の値を持つテーブル (提供された例の「way」など) を扱う場合、 MySQL でのクロス集計は難しいように思えるかもしれません。従来のアプローチでは、クエリ時に列名を指定する必要がありますが、動的な状況では実現できない可能性があります。

ソリューション アプローチ

この課題に取り組むには、2 つのプログラムによるソリューションを採用できます。 :

1.個別の値のクエリとピボット クエリの構築

このアプローチには、不確実なカウントを持つ列の個別の値をフェッチすることが含まれます。この値のリストを使用すると、動的ピボット クエリを構築し、必要な列を SELECT ステートメントに追加できます。

foreach ($pdo->query("SELECT DISTINCT `way` FROM `MyTable`") as $row) {
  $way = (int) $row["way"];
  $way_array[] = "MAX(IF(`way`=$way, `time`)) AS way_$way";
}
$pivotsql = "SELECT stop, " . join(", ", $way_array) . "FROM `MyTable` GROUP BY `stop`";

2.行ごとにクエリを実行し、ポストプロセスでピボットを実行する

この代替方法には、データベース内で構造化されているデータを行ごとにクエリすることが含まれます。データを配列に収集し、それを表示する前に列にピボット処理します。

$stoparray = array();
foreach ($pdo->query("SELECT * FROM `MyTable`") as $row) {
  $stopkey = $row["stop"];
  if (!array_key_exists($stopkey, $stoparray)) {
    $stoparray[$stopkey] = array("stop"=>$stopkey);
  }
  $waykey = "way_" . $row["way"];
  $stoparray[$stopkey][$waykey] = $row["time"];
}

どちらのアプローチでも、列数が不明な動的な状況に適応するコーディングが必要です。どのアプローチを選択するかは、特定のデータ操作要件と効率性の考慮事項によって異なります。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3