Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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
Sql 是否可以在一次查询中为我的表中的每个键指定最大值出现次数?_Sql_Postgresql_Amazon Redshift - Fatal编程技术网

Sql 是否可以在一次查询中为我的表中的每个键指定最大值出现次数?

Sql 是否可以在一次查询中为我的表中的每个键指定最大值出现次数?,sql,postgresql,amazon-redshift,Sql,Postgresql,Amazon Redshift,下面是我正在运行的查询,以获取给定对象的每个键的每个值的计数: SELECT key, value, COUNT(value) FROM keyval kv WHERE object_id = 123456 GROUP BY kv.key, kv.value ORDER BY kv.key, kv.value; 我要查询的表非常简单。只是: object_id BIGINT key VARCHAR(45) value VARCHAR(45) 所以我得到的值如下: Colo

下面是我正在运行的查询,以获取给定对象的每个键的每个值的计数:

SELECT key, value, COUNT(value)
FROM keyval kv
WHERE object_id = 123456
GROUP BY kv.key, kv.value
ORDER BY kv.key, kv.value;
我要查询的表非常简单。只是:

object_id BIGINT
key       VARCHAR(45)
value     VARCHAR(45)
所以我得到的值如下:

Color    Red     26
Color    Blue    24
Shape    Circle  14
Shape    Square  12
所以我想解析出蓝色和方形的结果,但保留红色和圆形的结果。这可能吗?

试试这个

SELECT KEY,
       value,
       Max(cnt)
FROM  (SELECT KEY,value,Count(value) As cnt
       FROM   keyval kv
       WHERE  object_id = 123456
       GROUP  BY kv.KEY,kv.value
       ORDER  BY kv.KEY Desc,kv.value Desc
       ) a
GROUP  BY a.KEY 
试试这个

SELECT KEY,
       value,
       Max(cnt)
FROM  (SELECT KEY,value,Count(value) As cnt
       FROM   keyval kv
       WHERE  object_id = 123456
       GROUP  BY kv.KEY,kv.value
       ORDER  BY kv.KEY Desc,kv.value Desc
       ) a
GROUP  BY a.KEY 
试试这个

SELECT KEY,
       value,
       Max(cnt)
FROM  (SELECT KEY,value,Count(value) As cnt
       FROM   keyval kv
       WHERE  object_id = 123456
       GROUP  BY kv.KEY,kv.value
       ORDER  BY kv.KEY Desc,kv.value Desc
       ) a
GROUP  BY a.KEY 
试试这个

SELECT KEY,
       value,
       Max(cnt)
FROM  (SELECT KEY,value,Count(value) As cnt
       FROM   keyval kv
       WHERE  object_id = 123456
       GROUP  BY kv.KEY,kv.value
       ORDER  BY kv.KEY Desc,kv.value Desc
       ) a
GROUP  BY a.KEY 

试试这个,但是要注意红色和蓝色都是26的情况。。。两者都将被退回

with cte as
    (select k,v,count(v) c
    from #kvp
    group by k,v)
select results.* 
from 
    cte restults
    inner join (select k, max(c) m from cte group by k) filter
        on restults.k = filter.k
where 
    filter.m = restults.c
    and id = @id

试试这个,但是要注意红色和蓝色都是26的情况。。。两者都将被退回

with cte as
    (select k,v,count(v) c
    from #kvp
    group by k,v)
select results.* 
from 
    cte restults
    inner join (select k, max(c) m from cte group by k) filter
        on restults.k = filter.k
where 
    filter.m = restults.c
    and id = @id

试试这个,但是要注意红色和蓝色都是26的情况。。。两者都将被退回

with cte as
    (select k,v,count(v) c
    from #kvp
    group by k,v)
select results.* 
from 
    cte restults
    inner join (select k, max(c) m from cte group by k) filter
        on restults.k = filter.k
where 
    filter.m = restults.c
    and id = @id

试试这个,但是要注意红色和蓝色都是26的情况。。。两者都将被退回

with cte as
    (select k,v,count(v) c
    from #kvp
    group by k,v)
select results.* 
from 
    cte restults
    inner join (select k, max(c) m from cte group by k) filter
        on restults.k = filter.k
where 
    filter.m = restults.c
    and id = @id

我会在子查询或cte中使用行号:

select
    [key],
    value,
    cnt
from (
     select
         [key],
         value,
         count(*) as cnt,
         row_number() over(partition by [key] order by count(*) desc) rnk
     from keyval
     where object_id = 123456
     group by
         [key],
         value
     ) kv
where rnk = 1

我会在子查询或cte中使用行号:

select
    [key],
    value,
    cnt
from (
     select
         [key],
         value,
         count(*) as cnt,
         row_number() over(partition by [key] order by count(*) desc) rnk
     from keyval
     where object_id = 123456
     group by
         [key],
         value
     ) kv
where rnk = 1

我会在子查询或cte中使用行号:

select
    [key],
    value,
    cnt
from (
     select
         [key],
         value,
         count(*) as cnt,
         row_number() over(partition by [key] order by count(*) desc) rnk
     from keyval
     where object_id = 123456
     group by
         [key],
         value
     ) kv
where rnk = 1

我会在子查询或cte中使用行号:

select
    [key],
    value,
    cnt
from (
     select
         [key],
         value,
         count(*) as cnt,
         row_number() over(partition by [key] order by count(*) desc) rnk
     from keyval
     where object_id = 123456
     group by
         [key],
         value
     ) kv
where rnk = 1




是否只获取出现次数最多的两个键/值=是!这正是我想要的。我会从永远不要对这样的数据使用键值存储开始。@HLGEM*多键值我误解了你@JimmyT.,我以为你指的是键和值中的两个,而不是键/值键/值。否,将至少有8个键(可能是无限的)具有无限的值,我需要获取该键出现次数最多的值。是否仅获取出现次数最多的两个键/值=是!这正是我想要的。我会从永远不要对这样的数据使用键值存储开始。@HLGEM*多键值我误解了你@JimmyT.,我以为你指的是键和值中的两个,而不是键/值键/值。否,将至少有8个键(可能是无限的)具有无限的值,我需要获取该键出现次数最多的值。是否仅获取出现次数最多的两个键/值=是!这正是我想要的。我会从永远不要对这样的数据使用键值存储开始。@HLGEM*多键值我误解了你@JimmyT.,我以为你指的是键和值中的两个,而不是键/值键/值。否,将至少有8个键(可能是无限的)具有无限的值,我需要获取该键出现次数最多的值。是否仅获取出现次数最多的两个键/值=是!这正是我想要的。我会从永远不要对这样的数据使用键值存储开始。@HLGEM*多键值我误解了你@JimmyT.,我以为你指的是键和值中的两个,而不是键/值键/值。不,将至少有8个键(可能是无限的)具有无限的值,我需要获取该键出现次数最多的值。抱歉,刚刚注意到MySQL标记。。。上面是针对sql server的,但您可能可以使用逻辑修改代码快照,我刚刚注意到标签。。。对不起,我不是想把我的问题标记为MySQL。这实际上适用于在PostgreSQL上运行的Amazon红移-该语法对PostgreSQLIt仍然有效!谢谢你的警告,因为事实证明我在22有两个值!我只是随便选了一个;重要的是数字计数。这是工作中的救命恩人,谢谢。对不起,刚才注意到MySQL标签。。。上面是针对sql server的,但您可能可以使用逻辑修改代码快照,我刚刚注意到标签。。。对不起,我不是想把我的问题标记为MySQL。这实际上适用于在PostgreSQL上运行的Amazon红移-该语法对PostgreSQLIt仍然有效!谢谢你的警告,因为事实证明我在22有两个值!我只是随便选了一个;重要的是数字计数。这是工作中的救命恩人,谢谢。对不起,刚才注意到MySQL标签。。。上面是针对sql server的,但您可能可以使用逻辑修改代码快照,我刚刚注意到标签。。。对不起,我不是想把我的问题标记为MySQL。这实际上适用于在PostgreSQL上运行的Amazon红移-该语法对PostgreSQLIt仍然有效!谢谢你的警告,因为事实证明我在22有两个值!我只是随便选了一个;重要的是数字计数。这是工作中的救命恩人,谢谢。对不起,刚才注意到MySQL标签。。。上面是针对sql server的,但您可能可以使用逻辑修改代码快照,我刚刚注意到标签。。。对不起,我不是想把我的问题标记为MySQL。这实际上适用于在PostgreSQL上运行的Amazon红移-该语法对PostgreSQLIt仍然有效!谢谢你的警告,因为事实证明我在22有两个值!我只是随便选了一个;重要的是数字计数。这是工作中的救命恩人,谢谢。这只返回我在内部查询中显示的所有键和值。这只返回在内部查询中显示的所有键和值。这只返回在内部查询中显示的所有键和值。这只返回在内部查询中显示的所有键和值。什么是cte?你能解释一下这是怎么回事吗?我在1月5日检查了您的SQL FIDLE,它已经关闭了。CTE是一个常见的表表达式。这里有更多信息:哦,德普,我一直在使用CTE,我只是不知道他们有一个名字(通过关键字引用)。虽然这是一个很好的解决方案,但红移使用Postgres 8.0,所以我不能使用它。什么是cte?你能解释一下这是怎么回事吗?我在1月5日检查了您的SQL FIDLE,它已经关闭了。CTE是一个常见的表表达式。这里有更多信息:哦,德普,我一直在使用CTE,我只是不知道他们有一个名字(通过关键字引用)。虽然这是一个很好的解决方案,但红移使用Postgres 8.0,所以我不能使用它。什么是cte?你能吗