PostgreSQL-选择多个最大计数
我正在使用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
我有一个桌子上的竞争者,上面有一个电子竞技游戏中的竞争者的信息。该表包含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划分”