Thread: Re: GROUPING and ORDERING and CONFUSION

Re: GROUPING and ORDERING and CONFUSION

From
"Tim Johnson"
Date:
Hello,

I was hoping somebody might be able to help me do this: I have a table with
two fields (num int, name text)

num   | name
----------------------------------------------
15    | First Category Heading
1510  | first category subheading
1511  | second category subheading
1560  | spurious category subheading
156010| first spurious category subheading
156011| second spurious category subheading
16    | Second Category Heading
1610  | Second category subheading
161010| Second category subheading subheading

and so on...

My problem is I want to pull that data out and group it so that it comes out
just the way it went in.. So my page can read:

15: First Category Heading1510: first category subheading1511: second category subheading
16: ... and so on..



I thought I could probably group by num on the first two digits and order by
asc? but I can't find a way to make that work.

Thanks in advance.


Tim Johnson



Re: Re: GROUPING and ORDERING and CONFUSION

From
"Moray McConnachie"
Date:
If it was literally the way the data went in, you should be able to order by
oid. Alternatively,

SELECT * FROM tablename ORDER BY substring (text(num) from 1 for 2);

should do it.
----------------------------------------------------------------
Moray.McConnachie@computing-services.oxford.ac.uk
----- Original Message -----
From: "Tim Johnson" <tim@celestialdesign.co.uk>
To: <pgsql-sql@postgresql.org>
Sent: Thursday, April 20, 2000 2:28 AM
Subject: [SQL] Re: GROUPING and ORDERING and CONFUSION


> Hello,
>
> I was hoping somebody might be able to help me do this: I have a table
with
> two fields (num int, name text)
>
> num   | name
> ----------------------------------------------
> 15    | First Category Heading
> 1510  | first category subheading
> 1511  | second category subheading
> 1560  | spurious category subheading
> 156010| first spurious category subheading
> 156011| second spurious category subheading
> 16    | Second Category Heading
> 1610  | Second category subheading
> 161010| Second category subheading subheading
>
> and so on...
>
> My problem is I want to pull that data out and group it so that it comes
out
> just the way it went in.. So my page can read:
>
> 15: First Category Heading
> 1510: first category subheading
> 1511: second category subheading
> 16: ... and so on..
>
>
>
> I thought I could probably group by num on the first two digits and order
by
> asc? but I can't find a way to make that work.
>
> Thanks in advance.
>
>
> Tim Johnson
>
>



Re: Re: GROUPING and ORDERING and CONFUSION

From
"Ross J. Reedstrom"
Date:
Hmm, souynds like you want all the ruples returned, right? Then it's not
really a GROUP problem, just an ORDER BY one. If all your data follows
the example you gave, this should work:


reedstrm=# select * from fred order by text(num); num   |                  name                  
--------+----------------------------------------    15 |  First Category Heading  1510 |  first category subheading
1511|  second category subheading  1560 |  spurious category subheading156010 |  first spurious category
subheading156011|  second spurious category subheading    16 |  Second Category Heading  1610 |  Second category
subheading161010|  Second category subheading subheading
 
(9 rows)

However, I _think_ your deeper question has to do with the indentation
part, right? Are you trying to indent based on category level? If you've got
some sort of programming language between your output and the SQL, then
something like:

reedstrm=# select text(num) as num ,length( text(num))/2 as level, name from fred order by text(num); num   | level |
              name                  
 
--------+-------+----------------------------------------15     |     1 |  First Category Heading1510   |     2 |
firstcategory subheading1511   |     2 |  second category subheading1560   |     2 |  spurious category
subheading156010|     3 |  first spurious category subheading156011 |     3 |  second spurious category subheading16
|     1 |  Second Category Heading1610   |     2 |  Second category subheading161010 |     3 |  Second category
subheadingsubheading
 
(9 rows)

Then use the 'depth' to output the proper indentation level.

Ross
-- 
Ross J. Reedstrom, Ph.D., <reedstrm@rice.edu> 
NSBRI Research Scientist/Programmer
Computer and Information Technology Institute
Rice University, 6100 S. Main St.,  Houston, TX 77005


On Thu, Apr 20, 2000 at 02:28:01AM +0100, Tim Johnson wrote:
> Hello,
> 
> 
> My problem is I want to pull that data out and group it so that it comes out
> just the way it went in.. So my page can read:
> 
> 15: First Category Heading
>     1510: first category subheading
>     1511: second category subheading
> 16: ... and so on..
> 
>