0

我有一个 SQL 表,如果我简化它看起来类似于这个

login_code_id 登录目的类型
一个 维护
一个 审查
C 审查
C 终止
一个 审查
扫描

我有一个相当大的 SQL 表形式的数据集。现在的问题是我应该怎么做才能按 login_code_id 对它进行分组,在其中我可以看到针对唯一 login_code_id 的不同种类的 login_purpose_type 以及每个 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_purpose_type 对于给定 login_code_id 出现的频率。

如果您真的想将 login_code_id 和 (login_ purpose_type, cnt) 列表作为一列,您可以一次性获得它(但对于大型数据集可能会很慢:

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 回答