SQL(MySQL) のデータ インポート スクリプトで問題に直面しています。行をタイプ別にグループ化して、各タイプの行数をカウントする必要があります。これまでのところ、それは実際には問題ではありません。できることがわかっているからです。
SELECT
data.type,
COUNT(data.type)
FROM data
GROUP BY data.type;
したがって、それを行うことで、次の結果が得られます。
-------------- ------------------- | | タイプ | COUNT(データ型) | |--------------|---------------------| | | 0 | 1 | | | 1 | 46 | | | 2 | 35 | | | 3 | 423 | | | 4 | 64 | | | 5 | 36 | | | 9 | 1 | -------------- -------------------
上記の結果のように、 type列の値は常に 0 から 9 の範囲になることがわかっています。したがって、テーブル コンテンツの既存の値だけでなく、欠落している型の値も一覧表示して、それらの COUNT 値を 0 に設定したいと思います。
上記のクエリ結果に基づくと、予想される結果は次のようになります。
-------------- ------------------- | | タイプ | COUNT(データ型) | |--------------|---------------------| | | 0 | 1 | | | 1 | 46 | | | 2 | 35 | | | 3 | 423 | | | 4 | 64 | | | 5 | 36 | | | 6 | 0 | | | 7 | 0 | | | 8 | 0 | | | 9 | 1 | -------------- -------------------
テーブルの内容を GROUP/COUNT-1 する前に各タイプの 1 行をこっそり INSERT し、INSERT で他の列にフラグを立てて、後でこれらの行を削除できるようにすることができます。したがって、インポート スクリプトの手順は次のように変更されます。
- TRUNCATEテーブル; (テーブルに古いデータがあった場合、新しいコンテンツを安全にインポートできません)
- 「制御」行を挿入します。
- LOAD DATA INFILE INTO TABLE ;
- GROUP/COUNT-1テーブルの内容。
- 「コントロール」行を削除します。(だから私はまだテーブルの内容を扱うことができます)
- 他の仕事をしてください。
しかし、期待される結果に到達するためのよりクリーンな方法を探していました。可能であれば、多数の JOIN を使用しない単一のクエリ。
提案やアドバイスをいただければ幸いです。どうもありがとうございました!
編集
すべてのタイプを格納して結合するテーブルの作成に関する回答に感謝します。それは本当に問題を解決します。私のアプローチもそれを解決しますが、あなたがしたように型を保存します。
したがって、受け取った回答と希望する範囲に基づいて、「別の」質問があります。明確にするだけです...新しいテーブルを作成したり、これらのタイプを挿入したりしないMySQLコマンドで期待される結果に到達することは可能ですか? ?
実際、タイプを保存する質問を解決する際に問題は見られません...単純化されたコマンドを見つけたいだけです...「ベストプラクティス」のようなもの...ある種のフィルター... as私は実行できます:
GROUP BY data.type(0,1,2,3,4,5,6,7,8,9)
これらのフィルタリングされた値を返すことができます。
そのようなコマンドが本当に存在する/可能である場合、私はそのようなコマンドを学ぶことに本当に興味があります.
そして改めまして、どうもありがとうございました!