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
PostgreSQL-选择多个最大计数_Postgresql_Select_Count_Max - Fatal编程技术网

PostgreSQL-选择多个最大计数

PostgreSQL-选择多个最大计数,postgresql,select,count,max,Postgresql,Select,Count,Max,我正在使用PostgreSQL。 我有一个桌子上的竞争者,上面有一个电子竞技游戏中的竞争者的信息。该表包含gameID、竞争对手的尼克和他/她扮演的角色的姓名 我想选择每个尼克和他们扮演最多的角色。 例如,如果竞争对手Faker扮演角色Ryze 4次,扮演Lulu 3次,我希望Faker Ryze 4出现在输出中 这就是我到目前为止所做的: select nick, character, count(*) as played from competitor group by nick, char

我正在使用PostgreSQL。
我有一个桌子上的竞争者,上面有一个电子竞技游戏中的竞争者的信息。该表包含gameID、竞争对手的尼克和他/她扮演的角色的姓名

我想选择每个尼克和他们扮演最多的角色。
例如,如果竞争对手Faker扮演角色Ryze 4次,扮演Lulu 3次,我希望Faker Ryze 4出现在输出中

这就是我到目前为止所做的:

select nick, character, count(*) as played
from competitor
group by nick, character
order by nick;
但是我在输出中同时得到了Faker Ryze 4和Faker Lulu 3。

我尝试过max()和nesting,但我想不出答案。

您使用max和nesting的方法是正确的,我稍微修改了一个答案:

如果为基本查询创建了一个视图,这可能更容易阅读:

名为PlayerCount的视图:

select nick, character, count(*) as played
from competitor
group by nick, character
SQL查询现在是:

select t1.nick, t1.character, t1.count
from PlayerCount t1
inner join
(
  select nick, max(played) max_count
  from PlayerCount
  group by nick
) t2
on t1.nick = t2.nick
and t1.count = t2.max_count

您使用max和nesting走的是正确的路线,我稍微修改了一个答案:

如果为基本查询创建了一个视图,这可能更容易阅读:

名为PlayerCount的视图:

select nick, character, count(*) as played
from competitor
group by nick, character
SQL查询现在是:

select t1.nick, t1.character, t1.count
from PlayerCount t1
inner join
(
  select nick, max(played) max_count
  from PlayerCount
  group by nick
) t2
on t1.nick = t2.nick
and t1.count = t2.max_count

您使用max和nesting走的是正确的路线,我稍微修改了一个答案:

如果为基本查询创建了一个视图,这可能更容易阅读:

名为PlayerCount的视图:

select nick, character, count(*) as played
from competitor
group by nick, character
SQL查询现在是:

select t1.nick, t1.character, t1.count
from PlayerCount t1
inner join
(
  select nick, max(played) max_count
  from PlayerCount
  group by nick
) t2
on t1.nick = t2.nick
and t1.count = t2.max_count

您使用max和nesting走的是正确的路线,我稍微修改了一个答案:

如果为基本查询创建了一个视图,这可能更容易阅读:

名为PlayerCount的视图:

select nick, character, count(*) as played
from competitor
group by nick, character
SQL查询现在是:

select t1.nick, t1.character, t1.count
from PlayerCount t1
inner join
(
  select nick, max(played) max_count
  from PlayerCount
  group by nick
) t2
on t1.nick = t2.nick
and t1.count = t2.max_count

这样就行了

SELECT nick, character,played
FROM
  (SELECT s1.*,
          row_number() OVER (PARTITION BY nick
                             ORDER BY played DESC) AS row1
   FROM
     (SELECT nick, character, COUNT(*) AS played
      FROM competitor
      GROUP BY nick, character
      ORDER BY nick,
               COUNT(*) DESC) s1)s2
WHERE row1=1;

查询是100%正确的。SQL小提琴。此外,它是唯一一个可以轻松支持同一个nick的绑定的查询(通过使用
rank()
更改
row\u number()
),并避免不必要的
加入

,这样就可以了

SELECT nick, character,played
FROM
  (SELECT s1.*,
          row_number() OVER (PARTITION BY nick
                             ORDER BY played DESC) AS row1
   FROM
     (SELECT nick, character, COUNT(*) AS played
      FROM competitor
      GROUP BY nick, character
      ORDER BY nick,
               COUNT(*) DESC) s1)s2
WHERE row1=1;

查询是100%正确的。SQL小提琴。此外,它是唯一一个可以轻松支持同一个nick的绑定的查询(通过使用
rank()
更改
row\u number()
),并避免不必要的
加入

,这样就可以了

SELECT nick, character,played
FROM
  (SELECT s1.*,
          row_number() OVER (PARTITION BY nick
                             ORDER BY played DESC) AS row1
   FROM
     (SELECT nick, character, COUNT(*) AS played
      FROM competitor
      GROUP BY nick, character
      ORDER BY nick,
               COUNT(*) DESC) s1)s2
WHERE row1=1;

查询是100%正确的。SQL小提琴。此外,它是唯一一个可以轻松支持同一个nick的绑定的查询(通过使用
rank()
更改
row\u number()
),并避免不必要的
加入

,这样就可以了

SELECT nick, character,played
FROM
  (SELECT s1.*,
          row_number() OVER (PARTITION BY nick
                             ORDER BY played DESC) AS row1
   FROM
     (SELECT nick, character, COUNT(*) AS played
      FROM competitor
      GROUP BY nick, character
      ORDER BY nick,
               COUNT(*) DESC) s1)s2
WHERE row1=1;
查询是100%正确的。SQL小提琴。此外,它是唯一一个可以轻松支持同一个尼克的领带的查询(通过使用
rank()
更改
row\u number()
),并避免不必要的
加入
尝试以下方法:

with counts as (
    select nick, character, count(*) cnt, max(sometimestamp) hora
    from competitor
    group by nick, character
    order by nick, cnt desc, hora
)


select nick, character, max(cnt)
from counts c1 where nick
in (select nick from counts where nick = c1.nick limit 1)
    and character in (select character from counts where nick = c1.nick limit 1)
group by nick, character
order by nick
max(sometimestamp)hora将打破僵局,你必须适应。或者,如果您不喜欢领带,请删除此字段。此查询将为您提供每个刻痕的字符,其计数更大,如果是平号,它将返回第一个达到最大计数的字符。

尝试以下操作:

with counts as (
    select nick, character, count(*) cnt, max(sometimestamp) hora
    from competitor
    group by nick, character
    order by nick, cnt desc, hora
)


select nick, character, max(cnt)
from counts c1 where nick
in (select nick from counts where nick = c1.nick limit 1)
    and character in (select character from counts where nick = c1.nick limit 1)
group by nick, character
order by nick
max(sometimestamp)hora将打破僵局,你必须适应。或者,如果您不喜欢领带,请删除此字段。此查询将为您提供每个刻痕的字符,其计数更大,如果是平号,它将返回第一个达到最大计数的字符。

尝试以下操作:

with counts as (
    select nick, character, count(*) cnt, max(sometimestamp) hora
    from competitor
    group by nick, character
    order by nick, cnt desc, hora
)


select nick, character, max(cnt)
from counts c1 where nick
in (select nick from counts where nick = c1.nick limit 1)
    and character in (select character from counts where nick = c1.nick limit 1)
group by nick, character
order by nick
max(sometimestamp)hora将打破僵局,你必须适应。或者,如果您不喜欢领带,请删除此字段。此查询将为您提供每个刻痕的字符,其计数更大,如果是平号,它将返回第一个达到最大计数的字符。

尝试以下操作:

with counts as (
    select nick, character, count(*) cnt, max(sometimestamp) hora
    from competitor
    group by nick, character
    order by nick, cnt desc, hora
)


select nick, character, max(cnt)
from counts c1 where nick
in (select nick from counts where nick = c1.nick limit 1)
    and character in (select character from counts where nick = c1.nick limit 1)
group by nick, character
order by nick


max(sometimestamp)hora将打破僵局,你必须适应。或者,如果您不喜欢领带,请删除此字段。此查询将为每个缺口提供计数较大的字符,如果是平号,它将返回第一个达到最大计数的字符。

我得到以下错误:错误:连接条件第15行不允许使用聚合函数:t1.count=t2.max\u count;啊,是的,很抱歉我留下了我测试它的虚拟表的名称,我现在已经修改了它。我得到了以下错误:错误:在连接条件第15行中不允许使用聚合函数:和t1.count=t2.max\u count;啊,是的,很抱歉我留下了我测试它的虚拟表的名称,我现在已经修改了它。我得到了以下错误:错误:在连接条件第15行中不允许使用聚合函数:和t1.count=t2.max\u count;啊,是的,很抱歉我留下了我测试它的虚拟表的名称,我现在已经修改了它。我得到了以下错误:错误:在连接条件第15行中不允许使用聚合函数:和t1.count=t2.max\u count;啊,是的,很抱歉我留下了我测试它的虚拟表的名称,我现在已经修改了它。这将导致所有计数。你正在计算nick和character witch在嵌套选择后的最大值。恐怕不是。这与我以前的查询完全相同。@MartinJohansen修复了它。你犯了同样的错误。您正在按尼克和角色进行分区,它们已经是内部选择(s1)中唯一的。所有行1都将是“1”。我看到“按尼克划分,字符”这将导致所有计数。你正在计算nick和character witch在嵌套选择后的最大值。恐怕不是。这与我以前的查询完全相同。@MartinJohansen修复了它。你犯了同样的错误。您正在按尼克和角色进行分区,它们已经是内部选择(s1)中唯一的。所有行1都将是“1”。我看到“按尼克划分,字符”这将导致所有计数。你正在计算nick和character witch在嵌套选择后的最大值。恐怕不是。这与我以前的查询完全相同。@MartinJohansen修复了它。你犯了同样的错误。您正在按尼克和角色进行分区,它们已经是内部选择(s1)中唯一的。所有行1都将是“1”。我看到了“按ni划分”