我有一个用户输入表。我想计算每个用户的输入数,根据计数排序,然后找到行号。
换句话说,我想根据输入的数量来确定每个用户的排名。
数据库在PostgreSQL 8.4中。似乎没有任何性能问题。该表的行数少于1000 000。
这是复制品
this问题。
遗憾的是,这个问题的分数是-3,却没有答案。
表名为table1,用户名列具有唯一用户。

user_name   | input
name1         txt input 1
name2         txt input 2
name1         txt input 3
name3         txt input 4
name1         txt input 5
name2         txt input 6

我想要的查询是这个附加功能:
WITH temp_table AS (
    SELECT user_name, COUNT(*)
    FROM table1
    GROUP BY user_name
    ORDER by count DESC )
SELECT name, row_number() OVER ( ) FROM temp_table;

输出:
user_name   | row_number
name1         1
name2         2
name3         3

如何使用用户名从该表中选择行?我试过这个:
WITH temp_table AS (
    SELECT user_name, COUNT(*)
    FROM table1
    GROUP BY user_name
    ORDER by count DESC )
SELECT name, row_number() OVER ( ) FROM temp_table
WHERE user_name = 'name2';

输出总是第1行
user_name   | row_number
name2         1

我早料到了
user_name   | row_number
name2         2

最佳答案

您可以在下面尝试-只需使用子查询

WITH temp_table AS (
    SELECT user_name, COUNT(*)
    FROM table1
    GROUP BY user_name
    ORDER by count DESC
)
select * from
(
SELECT name, row_number() OVER (order by null) FROM temp_table
)A where name='name2'

关于sql - 在排序表中查找用户的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55334572/

10-16 15:56
查看更多