在SQL中计算子查询

时间:2014-01-08 00:47:00

标签: sql

我有以下查询来计算每个process_track_id在表中出现的次数:

SELECT
    a.process_track_id,
    COUNT(1) AS 'num'
FROM 
    transreport.process_name a
GROUP BY
    a.process_track_id

返回以下结果:

process_track_id  |  num
    1   14
    2   44
    3   16
    5   8
    6   18
    7   17
    8   14

这很棒。现在是我被卡住的部分。我想得到下表:

num count
8   1
14  2
16  1
17  1
18  1
44  1

其中num是第一个表中的不同计数,count是频率发生的次数。

这是我尝试过的(它是一个子查询,但我没有按方法出售),我还没有能够让它继续工作。我是SQL的新手,我想我错过了语法的一些关键方面。

SELECT
    X.id_count,
    count(1) as 'num_count'
FROM
    (SELECT
        a.process_track_id,
        COUNT(1) AS 'id_count'
    FROM 
        transreport.process_name a
    GROUP BY
        a.process_track_id
        --COUNT(1) AS 'id_count'
    ) X;

有什么想法吗?

可能要记住,这可能必须在具有至少100万条记录的数据库上运行,并且我无法在此过程中创建新表。

谢谢!

2 个答案:

答案 0 :(得分:1)

以下是您驾驶的子查询方法:

SELECT id_count, COUNT(*) AS 'num_count'
FROM (SELECT a.process_track_id
            ,COUNT(*) AS 'id_count'
      FROM transreport.process_name a
      GROUP BY a.process_track_id
      )sub
GROUP BY id_count

不确定是否有更好的方法,因为无论如何聚合都需要运行一次。

答案 1 :(得分:1)

试试这个

SELECT x.num, COUNT(*) AS COUNT
FROM (
    SELECT
        a.process_track_id, -- <--- You may removed this column
        COUNT(*) AS 'num'
    FROM 
        transreport.process_name a
    GROUP BY
        a.process_track_id
        ) X
GROUP BY X.num