如何在sql表中查找唯一值并创建统一视图

时间:2013-10-13 00:42:33

标签: mysql sql phpmyadmin

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

    login_code_id | login_purpose_type

    ==================================
    A             | maintenance
    ----------------------------------
    A             | review
    ----------------------------------
    C             | review
    ----------------------------------
    C             | terminate
    ----------------------------------
    A             | review
    ----------------------------------
    B             | scan
    ----------------------------------

我有一个SQL表格的大型数据集。现在问题是我应该怎么做才能通过login_code_id对其进行分组,其中我可以看到针对唯一login_code_id的login_purpose_type的不同种类以及每个login_code_id每个login_purpose_type发生的时间。最后将结果存储在一个新表中,这让我很困惑。我该怎么做呢?如果我问的问题非常简单,那就无知了。我对此很新。我正在使用phpmyadmin创建表

1 个答案:

答案 0 :(得分: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)列表作为一列,你可以像往常一样获得它(但对于大数据集可能会很慢:

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 ;