Re: enumerating rows
Re: enumerating rows
От:
"Oliver Elphick" <olly@lfix.co.uk>
Дата:
Kovacs Zoltan wrote:
>> Use the "serial" column type.
>Unfortunately it's not what I expect. Assume that I have an arbitrary
>"SELECT expr1 as column1, expr2 as column2, ..." which gives
>
>column1 | column2 | ...
>--------+---------+- ...
>......data..............
>........................
>
>I would like to get the same result with the only plus column row_no:
>
>row_no | column1 | column2 | ...
>-------+---------+---------+- ...
> 1 | ......data..............
> 2 | ........................
>.................................
>
>with a new SELECT statement: "SELECT ?????, expr1 as column1, expr2 as
>column2, ...". What to write instead of ??????
Here is a method which is fairly cumbersome, but will do what you want.
(Whether what you want is useful, is another matter. The row numbers
have no meaning except to delineate which row is printed after which; they
bear no relation to their order in the table.)
Create the C code shown in the attachment.
Compile it (the example shown is for Linux, see the programmer's manual for
how to do it on other systems):
gcc -fpic -c rowno.c
gcc -shared -o rowno.so rowno.o
In the database, create functions as shown (remember to change
the directory from /tmp!):
CREATE FUNCTION reset_row() RETURNS int4
AS '/tmp/rowno.so' LANGUAGE 'C';
CREATE FUNCTION row_no() RETURNS int4
AS '/tmp/rowno.so' LANGUAGE 'C';
Now you can use the function:
bray=# select row_no() as row,id,name from person;
row | id | name
------+--------+-------------------------------------------------------
1 | 100001 | Mr Graham Love (Director)
2 | 100002 | AILEEN BROWN
...
but you have to do this in between queries:
bray=# select reset_row();
because the numbers don't reset themselves:
bray=# select row_no() as row,id,name from person;
row | id | name
-------+--------+-------------------------------------------------------
6015 | 100001 | Mr Graham Love (Director)
6016 | 100002 | AILEEN BROWN
...
Oliver Elphick Oliver.Elphick@lfix.co.uk
Isle of Wight http://www.lfix.co.uk/oliver
PGP: 1024R/32B8FAA1: 97 EA 1D 47 72 3F 28 47 6B 7E 39 CC 56 E4 C1 47
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839 932A 614D 4C34 3E1D 0C1C
========================================
"Is any one of you in trouble? He should pray. Is
anyone happy? Let him sing songs of praise. Is any one
of you sick? He should call the elders of the church
to pray over him...The prayer of a righteous man is
powerful and effective." James 5:13,14,16
Re: enumerating rows
От:
"Oliver Elphick" <olly@lfix.co.uk>
Дата:
Kovacs Zoltan wrote: >> Here is a method which is fairly cumbersome, but will do what you want. >> (Whether what you want is useful, is another matter. The row numbers >> have no meaning except to delineate which row is printed after which; they >> bear no relation to their order in the table.) >Thanks, Oliver! Are you sure there is no other (more >convenient) solution? I don't think this is a part of the SQL standard but >it could be a PostgreSQL extension. Hm? I believe Oracle has an inbuilt feature to do this; I don't know about any other database. Nor do I know if any other databases can accommodate user-defined functions. But what is the actual use of this feature? Why do you need it? -- Oliver Elphick Oliver.Elphick@lfix.co.uk Isle of Wight http://www.lfix.co.uk/oliver PGP: 1024R/32B8FAA1: 97 EA 1D 47 72 3F 28 47 6B 7E 39 CC 56 E4 C1 47 GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839 932A 614D 4C34 3E1D 0C1C ======================================== "Is any one of you in trouble? He should pray. Is anyone happy? Let him sing songs of praise. Is any one of you sick? He should call the elders of the church to pray over him...The prayer of a righteous man is powerful and effective." James 5:13,14,16
Re: enumerating rows
От:
"Luis C. Ferreira" <lferreira@ciudad.com.ar>
Дата:
Try this....
CREATE SEQUENCE just_a_seq;
Select nextval('just_a_seq') as row_no, * from pg_tables ;
drop SEQUENCE just_a_seq;
>
> row_no | column1 | column2 | ...
> -------+---------+---------+ ...
> 1 | datum11 | datum12 | ...
> 2 | datum21 | datum22 | ...
> ... | ... | ... | ...
>
> I didn't find anything in the docs.
>
> TIA, Zoltan
>
RE: enumerating rows
От:
"Koen Antonissen" <Koen@Cee-Kay.net>
Дата:
I was searching for the same thing, I couldn't found it though :( -----Original Message----- From: Kovacs Zoltan [mailto:kovacsz@pc10.radnoti-szeged.sulinet.hu] Sent: woensdag 11 april 2001 16:37 To: Poul L. Christiansen Cc: pgsql-sql@postgresql.org Subject: Re: [SQL] enumerating rows > Use the "serial" column type. Unfortunately it's not what I expect. Assume that I have an arbitrary "SELECT expr1 as column1, expr2 as column2, ..." which gives column1 | column2 | ... --------+---------+- ... ......data.............. ........................ I would like to get the same result with the only plus column row_no: row_no | column1 | column2 | ... -------+---------+---------+- ... 1 | ......data.............. 2 | ........................ ................................. with a new SELECT statement: "SELECT ?????, expr1 as column1, expr2 as column2, ...". What to write instead of ?????? TIA, Zoltan ---------------------------(end of broadcast)--------------------------- TIP 5: Have you checked our extensive FAQ? http://www.postgresql.org/users-lounge/docs/faq.html
Re: enumerating rows
От:
"Poul L. Christiansen" <poulc@cs.auc.dk>
Дата:
Use the "serial" column type. create table myTable (row_no serial,column1 varchar(10),column2 varchar(20)); HTH, Poul L. Christiansen On Wed, 11 Apr 2001, Kovacs Zoltan wrote: > Maybe a trivial question, maybe it's foreign from SQL, I'dont know... > How to add a column which stands for the row number in each row of the > result? E.g.: > > row_no | column1 | column2 | ... > -------+---------+---------+ ... > 1 | datum11 | datum12 | ... > 2 | datum21 | datum22 | ... > ... | ... | ... | ... > > I didn't find anything in the docs. > > TIA, Zoltan > > -- > Kov\'acs, Zolt\'an > kovacsz@pc10.radnoti-szeged.sulinet.hu > http://www.math.u-szeged.hu/~kovzol > ftp://pc10.radnoti-szeged.sulinet.hu/home/kovacsz > > > ---------------------------(end of broadcast)--------------------------- > TIP 6: Have you searched our list archives? > > http://www.postgresql.org/search.mpl >
enumerating rows
От:
Kovacs Zoltan <kovacsz@pc10.radnoti-szeged.sulinet.hu>
Дата:
Maybe a trivial question, maybe it's foreign from SQL, I'dont know... How to add a column which stands for the row number in each row of the result? E.g.: row_no | column1 | column2 | ... -------+---------+---------+ ... 1 | datum11 | datum12 | ... 2 | datum21 | datum22 | ... ... | ... | ... | ... I didn't find anything in the docs. TIA, Zoltan -- Kov\'acs, Zolt\'an kovacsz@pc10.radnoti-szeged.sulinet.hu http://www.math.u-szeged.hu/~kovzol ftp://pc10.radnoti-szeged.sulinet.hu/home/kovacsz
Re: enumerating rows
От:
Kovacs Zoltan <kovacsz@pc10.radnoti-szeged.sulinet.hu>
Дата:
> Use the "serial" column type. Unfortunately it's not what I expect. Assume that I have an arbitrary "SELECT expr1 as column1, expr2 as column2, ..." which gives column1 | column2 | ... --------+---------+- ... ......data.............. ........................ I would like to get the same result with the only plus column row_no: row_no | column1 | column2 | ... -------+---------+---------+- ... 1 | ......data.............. 2 | ........................ ................................. with a new SELECT statement: "SELECT ?????, expr1 as column1, expr2 as column2, ...". What to write instead of ?????? TIA, Zoltan
Re: enumerating rows
От:
Joel Burton <jburton@scw.org>
Дата:
On Wed, 11 Apr 2001, Kovacs Zoltan wrote: > > Here is a method which is fairly cumbersome, but will do what you want. > > (Whether what you want is useful, is another matter. The row numbers > > have no meaning except to delineate which row is printed after which; they > > bear no relation to their order in the table.) > Thanks, Oliver! Are you sure there is no other (more > convenient) solution? I don't think this is a part of the SQL standard but > it could be a PostgreSQL extension. Hm? If you don't need the numbers in PostgreSQL, but in the output, could you pipe your query results through `cat -b`, which will add line numbers? -- Joel Burton Director of Information Systems, Support Center of Washington
Re: enumerating rows
От:
Kovacs Zoltan <kovacsz@pc10.radnoti-szeged.sulinet.hu>
Дата:
> Here is a method which is fairly cumbersome, but will do what you want. > (Whether what you want is useful, is another matter. The row numbers > have no meaning except to delineate which row is printed after which; they > bear no relation to their order in the table.) Thanks, Oliver! Are you sure there is no other (more convenient) solution? I don't think this is a part of the SQL standard but it could be a PostgreSQL extension. Hm? Regards, Zoltan
Re: enumerating rows
От:
Kovacs Zoltan <kovacsz@pc10.radnoti-szeged.sulinet.hu>
Дата:
> Try this....
>
> CREATE SEQUENCE just_a_seq;
> Select nextval('just_a_seq') as row_no, * from pg_tables ;
> drop SEQUENCE just_a_seq;
Wow! Great idea! :-)
In fact I need row numbering in browsing and printing invoices. They
should be read on various platforms (Windows clients, generated HTML and
printed reports made by Windows) and it would be good to unify the
handling of enumeration. Of course, all clients can enumerate the result
somehow, but it's hard to maintain the separate codes.
Regards, Zoltan
-- Kov\'acs, Zolt\'an kovacsz@pc10.radnoti-szeged.sulinet.hu http://www.math.u-szeged.hu/~kovzol ftp://pc10.radnoti-szeged.sulinet.hu/home/kovacsz
Re: enumerating rows
От:
Peter Eisentraut <peter_e@gmx.net>
Дата:
Kovacs Zoltan writes: > Maybe a trivial question, maybe it's foreign from SQL, I'dont know... > How to add a column which stands for the row number in each row of the > result? E.g.: > > row_no | column1 | column2 | ... > -------+---------+---------+ ... > 1 | datum11 | datum12 | ... > 2 | datum21 | datum22 | ... > ... | ... | ... | ... > > I didn't find anything in the docs. Your client can do that. When you fetch the results you have to have some sort of loop anyway, so you have (or keep) a counter there. There's no use of the server generating this information, because the numbering is implied by the order in which the rows are sent. -- Peter Eisentraut peter_e@gmx.net http://yi.org/peter-e/
Re: enumerating rows
От:
"Josh Berkus" <josh@agliodbs.com>
Дата:
Kovacs, Oliver, First, thank you Oliver for the nice C program for this purpose. If there doesn't turn out to be another method, it shoudl og in the postgresql.org site. However, Postgresql does have an internal row count for query results. Otherwise LIMIT and OFFSET would not work. It seems like there should be some way to access this internal row count. -Josh ______AGLIO DATABASE SOLUTIONS___________________________ Josh Berkus Complete information technology josh@agliodbs.com and data management solutions (415) 565-7293 for law firms, small businesses fax 621-2533 and non-profit organizations. San Francisco