Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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
8.3之前的Postgresql版本的不同行数_Sql_Postgresql - Fatal编程技术网

8.3之前的Postgresql版本的不同行数

8.3之前的Postgresql版本的不同行数,sql,postgresql,Sql,Postgresql,我有一个表,它返回给我如下内容: name | value John | 3 John | 4 John | 5 Robert | 10 Robert | 6 Robert | 4 等等 我需要在不同的名称上显示行数,如下所示: row_num | name | value 1 | John | 3 1 | John | 4 1 | John | 5 2 | Robert | 10 2 | Robert

我有一个表,它返回给我如下内容:

name   | value
John   | 3
John   | 4
John   | 5
Robert | 10
Robert | 6
Robert | 4
等等

我需要在不同的名称上显示行数,如下所示:

row_num | name   | value
1       | John   | 3
1       | John   | 4
1       | John   | 5
2       | Robert | 10
2       | Robert | 6
2       | Robert | 4
主要的问题是我的Postgres版本是8.2,我现在无法升级,所以在做了研究之后,我发现一些有用的功能在我的版本上是不可用的,比如row_number,generate_series,等等


有办法吗?

这适用于您的示例数据:

SELECT
  COALESCE(r.row_num, m.row_max) AS row_num,
  t.name,
  t.value
FROM tmp t
LEFT JOIN (
  SELECT
    r1.name,
    COUNT(*) AS row_num
  FROM (SELECT DISTINCT name FROM tmp) r1
  JOIN (SELECT DISTINCT name FROM tmp) r2 
    ON r1.name > r2.name
  GROUP BY 1) r 
    ON t.name = r.name
LEFT JOIN (
  SELECT
    COUNT(*) AS row_max
  FROM (SELECT DISTINCT name FROM tmp) r3
) m ON True;
select (select count(distinct name) from person p2 where p2.name <= p1.name) as cnt,
       p1.name,
       p1.value
from person p1
order by p1.name;
我只能在9.4上测试它,但我认为它也应该在8.x上工作,但不会很快

SQLFiddle:


但您确实应该升级到受支持和维护的版本

使用临时视图模拟子查询和CTE的老把戏:

CREATE TABLE a (name text, val integer);
INSERT INTO a (name , val ) VALUES
 ('John' , 3 )
, ('John' , 4 )
, ('John' , 5 )
, ('Robert' , 10 )
, ('Robert' , 6 )
, ('Robert' , 4 )
    ;
CREATE VIEW d AS SELECT DISTINCT name FROM a;

CREATE VIEW c AS
SELECT d0.name, COUNT(*) AS rnk
FROM d d0
JOIN d d1 ON d1. name <= d0.name
GROUP BY d0.name
    ;

-- SELECT * FROM d;
-- SELECT * FROM c;

SELECT c.rnk, a.name, a.val
FROM a
JOIN c ON a.name = c.name
    ;

DROP VIEW d;
DROP VIEW c;