0

単純化すると、これに似たSQLテーブルがあります

login_code_id login_purpose_type
メンテナンス
レビュー
レビュー
終了する
レビュー
B スキャン

SQL テーブルの形式でかなり大きなデータセットがあります。ここで、一意の login_code_id に対するさまざまな種類の login_purpose_type と、login_code_id ごとに各 login_purpose_type が発生する回数を確認できる login_code_id でこれをグループ化するにはどうすればよいでしょうか。最後に、結果を新しいテーブルに保存しますが、これは私を完全に混乱させます。これにどのようにアプローチすればよいですか?私が求めていることが非常に単純である場合、無知で申し訳ありません。私はこれに非常に慣れていません。phpmyadmin を使用してテーブルを作成しています

4

1 に答える 1

0

クエリの結果から CREATE TABLE を使用できます。( http://dev.mysql.com/doc/refman/5.5/en/create-table.htmlを参照)

CREATE TABLE summary 
SELECT login_code_id, login_purpose_type, COUNT(login_purpose_type) AS cnt 
FROM <old_table_name> 
GROUP BY login_code_id, login_purpose_type;

次の構造のテーブルが表示されます。

 login_code_id | login_purpose_type | cnt

 ======================================= 
 A             |  maintenance       |  5
 ----------------------------------------
 A             |  review            |  3
 ----------------------------------------
 B             |  review            |  2      

この表では、すべての行が、特定の login_code_id に対して特定の login_purpose_type が発生した頻度を示しています。

本当に login_code_id と (login_purpose_type, cnt) のリストを 1 つの列として保持したい場合は、一度に取得できます (ただし、大きなデータ セットの場合は遅くなる可能性があります:

CREATE TABLE summary_2 
SELECT login_code_id, group_concat(cnt) AS info 
FROM ( SELECT login_code_id,
concat("(", login_purpose_type,",", count(login_code_id),")") AS cnt 
FROM <old_table_name> 
GROUP BY login_code_id, login_purpose_type) s 
GROUP BY login_code_id ;

これにより、次のようなテーブルが得られます。

+-----------------+---------------------------+
| login_code_id   | info                      |
+-----------------+---------------------------+
| A               | (maintenance,3),(review,2)|
| B               | (scan,2),(review,3)       |
| C               | (terminate,1)             |
+---------------------------------------------+

または、最初のテーブルを中間テーブルとして使用し、前のサマリー テーブルから summary_2 を作成することもできます。

CREATE TABLE summary_2 
SELECT login_code_id, group_concat(cnt) AS info FROM ( 
SELECT login_code_id, concat("(", login_purpose_type,",", cnt,")") AS cnt 
FROM summary ) s 
GROUP BY login_code_id ;
于 2013-10-13T00:54:33.633 に答える