Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PostgreSQL中选择最大计数_Sql_Postgresql_Group By - Fatal编程技术网

如何在PostgreSQL中选择最大计数

如何在PostgreSQL中选择最大计数,sql,postgresql,group-by,Sql,Postgresql,Group By,我在PostgreSQL中有一个具有以下模式的表: Category | Type ------------+--------- A | 0 C | 11 B | 5 D | 1 D | 0 F | 2 E | 11 E | 9 . | . .

我在PostgreSQL中有一个具有以下模式的表:

Category    |   Type 
------------+---------
A           |   0 
C           |   11 
B           |   5 
D           |   1 
D           |   0 
F           |   2   
E           |   11 
E           |   9 
.           |   . 
.           |   .
如何选择类型的类别最大出现次数?以下是我的全部:

SELECT 
    category, 
    type, 
    COUNT(*)
FROM 
    table
GROUP BY 
    category, 
    type
ORDER BY 
    category, 
    count 
    DESC
我的预期结果如下:

类别|计数 ----+----+---

A | 0 | 5

B | 5 | 30

C | 2 | 20

D | 3 | 10


这是每个类别中出现次数最多的类型,具有该类型的计数

选择类别,最大发生率 从中选择t.category作为类别,从表t中计算*作为发生

SELECT 
    category, 
    type, 
    COUNT(*)
FROM 
    table
GROUP BY 
    category, 
    type
HAVING 
    COUNT(*) = (SELECT MAX(C) FROM (SELECT COUNT(*) AS C FROM A GROUP BY A) AS Q)
编辑: 我向读者道歉

COUNT(*) = (SELECT MAX(COUNT(*)) FROM table GROUP BY category,type) 
是ORACLE版本,postgresql版本是:

COUNT(*) = (SELECT MAX(C) FROM (SELECT COUNT(*) AS C FROM A GROUP BY A) AS Q)

如果我理解正确,您可以使用窗口功能:

SELECT category, type, cnt
FROM (SELECT category, type, COUNT(*) as cnt,
             ROW_NUMBER() OVER (PARTITION BY type ORDER BY COUNT(*) DESC) as seqnum
      FROM table
      GROUP BY category, type
     ) ct
WHERE seqnum = 1;

您可以使用以下查询:

SELECT category, type, cnt
FROM (
   SELECT category, type, cnt,
          RANK() OVER (PARTITION BY category 
                       ORDER BY cnt DESC) AS rn
   FROM (
      SELECT category, type, COUNT(type) AS cnt
      FROM mytable
      GROUP BY category, type ) t
) s
WHERE s.rn = 1
上面的查询使用OP中发布的您自己的查询,并对其应用RANK windowed函数。使用秩,我们可以指定来自初始查询的所有记录具有最大的COUNTtype值

注意:如果有多个类型具有特定类别的最大出现次数,则作为使用RANK的结果,上述查询将返回所有类型


将列名放在countcol\u name中您可以在您的问题中也包括预期的结果吗?这会导致聚合函数调用不能嵌套到MAXCOUNT中*
SELECT 
    category, 
    type, 
    COUNT(*) AS count
FROM 
    table
GROUP BY 
    category, 
    type
ORDER BY 
    category ASC