Re: Sort a table by a column value that is a column name?

From: Steve Midgley <science(at)misuse(dot)org>
To: overland <overland(at)recarea(dot)com>
Cc: pgsql-sql <pgsql-sql(at)lists(dot)postgresql(dot)org>
Subject: Re: Sort a table by a column value that is a column name?
Date: 2021-07-09 16:42:28
Message-ID: CAJexoSJ15B5xBjTtFXmrHf1eYkufSARSz4Vq++6sCYuxjU-AYA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

On Fri, Jul 9, 2021 at 9:03 AM overland <overland(at)recarea(dot)com> wrote:

> I'm writing a program and I'm aiming to seperate logic from the database
> and at the same time optimize program performance. I was doing a sort on
> Postgresql 13 query results in a program but pushing
> the sort to postgresql would optimize performance. So I modified an
> existing query to do the sorting now and it isn't sorting as I want, but I
> don't know what to expect. I'm looking to sort a table
> using a column name that is stored in another table. I don't know the
> column to sort on when the query is written.
>
> An example is below that is quick and dirty and shows what I'm trying to
> do. There isn't an error when the query is executed, yet the sort doesn't
> work and fails sighlently. Is there another way to
> accomplish the same thing?
>
>
>
>
>
> CREATE TABLE list (
> id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
> attribute TEXT,
> property TEXT,
> descid INT
> );
>
>
> CREATE TABLE descriptor (
> id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
> name TEXT
> );
>
> INSERT INTO descriptor(name) VALUES('attribute'), ('property');
> INSERT INTO list(attribute, property, descid) VALUES('todo', 'camping', 1);
> INSERT INTO list(attribute, property, descid) VALUES('hooplah',
> 'glamping', 1);
> INSERT INTO list(attribute, property, descid) VALUES('stuff', 'other', 1);
> INSERT INTO list(attribute, property, descid) VALUES('car', 'bike', 2);
> INSERT INTO list(attribute, property, descid) VALUES('cat', 'hat', 2);
> INSERT INTO list(attribute, property, descid) VALUES('bat', 'that', 2);
>
>
>
>
> SELECT attribute, property, descid
> FROM list AS l
> JOIN descriptor AS d ON l.descid = d.id
> WHERE l.id < 4
> ORDER BY name;
>
> What do you mean by the "sort fails silently?" Do you mean the query runs
and returns data, but the data are not sorted by your name field?

I modified your sample slightly (to make it work with Pg 9.x in SQLFiddle):
http://sqlfiddle.com/#!17/feaff/1

I also changed l.id 3 to link to descid 2 (otherwise there's nothing to
sort - the records all have the same name).

It works fine for me.. What am I missing?

Steve

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message overland 2021-07-09 16:59:25 Sort a table by a column value that is a column name?
Previous Message Rob Sargent 2021-07-09 16:32:21 Re: Sort a table by a column value that is a column name?