クエリの結果から 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 ;