0

これが「ばかげた」質問のように思われる場合は、お詫びします。私がやろうとしていることを説明する適切な用語を本当に知りません (そのため、ヘルプを探すのは少し無駄でした)。

基本的に、最初は次の形式のデータがありました。

|      timestamp      | category A | category B | .......| category n|
| 2011-12-02 00:05:00 |    23.63   |    27.00   | .......|   24.03   |
| 2011-12-02 00:10:00 |    23.75   |    24.42   | .......|   24.45   |
| 2011-12-02 00:15:00 |    23.31   |    23.96   | .......|   26.54   |

このデータをデータベースに入れ (そして正規化)、次のようにデータベースに存在するようにしました。

+---------------------+--------------+-------+
| timestamp           | catergory_id | value |
+---------------------+--------------+-------+
| 2011-12-02 00:05:00 |            2 | 27.00 |
| 2011-12-02 00:10:00 |            2 | 24.42 |
| 2011-12-02 00:15:00 |            2 | 23.96 |
| 2011-12-02 00:20:00 |            2 | 23.73 |
| 2011-12-02 00:25:00 |            2 | 23.73 |
+---------------------+--------------+-------+

次のように、タイムスタンプで異なるカテゴリを選択しようとしています(比較を有効にするため):

+---------------------+-------+-------+
| timestamp           | cat_a | cat_b |
+---------------------+-------+-------+
| 2011-12-02 00:05:00 | 23.63 | 27.00 |
| 2011-12-02 00:10:00 | 23.75 | 24.42 |
| 2011-12-02 00:15:00 | 23.31 | 23.96 |
| 2011-12-02 00:20:00 | 23.00 | 23.73 |
| 2011-12-02 00:25:00 | 22.91 | 23.73 |
+---------------------+-------+-------+

これは基本的に元のデータ構造に似ています(ただし、2つだけでなく、複数と可変のカテゴリを選択/比較したいと思います)。

join(個々のテーブルで個々のカテゴリを選択した後)を使用して、これを行うことができました。これは、たとえば 2 つのカテゴリを比較する場合には問題ありませんが、特に 15 または 20 の異なるカテゴリを選択して比較したい場合は、非常に非効率的です。特定のカテゴリにデータ ポイントがない場合も問題です。

(私がこれを行ってきたもう1つの方法は、個々のテーブルを選択し、後でそれが使用されるPythonアプリケーションでデータを「マージ」することですが、これも同様に非効率的です)

mysqlでこれを行うには、もっと簡単で直感的な方法が必要だと思います-そして、非常に基本的なものが欠けています。私は本当に非正規化したくありません (多くのカテゴリがあり、これ以外の用途のために正規化することは理にかなっています)。

乾杯、

4

2 に答える 2

0

これは基本的にピボット テーブルの問題です。MySQL には、他の DBMS のようにピボット テーブルを作成する SQL 拡張機能が組み込まれていないため、少し注意が必要です。ここでそれらを作成する 1 つの方法を見つけることができます: http://www.artfulsoftware.com/infotree/qrytip.php?id=78

于 2013-07-26T06:13:51.547 に答える