我有一个 SQL 表,如果我简化的话,它看起来与此类似
我有一个相当大的 SQL 表形式的数据集。现在的问题是我应该做什么来按login_code_id对其进行分组,在其中我可以看到针对唯一的login_code_id的不同类型的login_ Purpose_type以及每个login_code_id每个login_ Purpose_type出现的次数。最后将结果存储在一个新表中,这让我完全困惑。我应该如何处理这个问题?如果我问的问题很简单,请原谅我的无知。我对此很陌生。我正在使用 phpmyadmin 创建表
最佳答案
您可以根据查询结果使用 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 ;
关于mysql - 如何在 SQL 表中查找唯一值并创建统一 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19340659/