【问题标题】:SQL count occurrence of every record (integer) in one table with multiple columnsSQL 计数在一个具有多列的表中每条记录(整数)的出现次数
【发布时间】:2017-11-29 02:51:32
【问题描述】:

我正在研究一种算法,使用 SQL 和 JAVA,涉及大型数据集。 在 SQL 中,我有一个包含所有数据的表,我想在将其加载到 JAVA 之前尽可能多地使用 SQL 查询。

我生成随机数据集(在 Java 中),仅由 1 到 40001 之间的整数组成,然后将它们插入 MySQL 表中。 行可以有不同的长度,最多有 30 个项目/记录(这包括 ID)。所以通常列的数量是 30(所以 COL1,COL2,COL3,......COL30)但是这个数量在某些时候也会是随机的

我想要做的是计算表/数据集中每个不同项目的出现次数,并将它们的计数放入一个新表中。然而,这很棘手,因为我想在整个表格中计算它,而不仅仅是一列。我该怎么做?

指定:

以这张桌子为例(与我平时的桌子相比,这张桌子很小):

ID | COL1 | COL2 | COL3 | COL4 | COL5 |
---------------------------------------
1  |   8  |  35  |  42  |  12  |  27  |
2  |  22  |  42  |  35  |  8   | NULL |
3  |  18  |  22  |   8  | NULL | NULL |
4  |  42  |  12  |  27  |  35  |  8   |
5  |  18  |  27  |  12  |  22  | NULL |

我想从这张表中提取的是:

Item | Count
-------------
8    |  3
35   |  3
40   |  1
12   |  3
27   |  3
22   |  3
42   |  2 
43   |  1
18   |  2

如果有帮助的话,一个项目也不能多次出现在同一行中。

谁能帮助我?或者它可以简单地不在 SQL 中完成吗?在性能方面,在 JAVA 中执行此操作会更好吗?

提前致谢!

【问题讨论】:

    标签: java mysql sql count distinct


    【解决方案1】:

    您可以通过取消透视数据然后聚合来做到这一点:

    select col, count(*)
    from (select col1 as col from t union all
          select col2 from t union all
          . . . 
          select col30 from t
         ) t
    group by col;
    

    如果您没有已知的列集,则需要使用动态 SQL。

    【讨论】:

    • 这很棒,完美运行。我正在考虑使列的数量不可更改,因为它对我的算法并不重要。因此不需要动态查询。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    相关资源
    最近更新 更多