Re: Need SQL help, I'm stuck.

Поиск
Список
Период
Сортировка
От Antonio Fiol Bonnín
Тема Re: Need SQL help, I'm stuck.
Дата
Msg-id 3C162D9D.9070305@w3ping.com
обсуждение исходный текст
Ответ на Re: Need SQL help, I'm stuck.  (wsheldah@lexmark.com)
Список pgsql-general
What about this one, which also happens to give the right result?

select B.* from T1 A RIGHT JOIN T1 B on (A.C1=B.C1 AND A.C2>B.C2) where
A.c1 is null;

It is really amazing how many different ways there are to express the
same wishes in SQL...

Compared to the following ones, it is efficient:
SELECT A.* FROM T1 A WHERE NOT EXISTS (select * from T1 B where B.C2 >
A.C2 AND B.C1=A.C1);
SELECT * FROM T1 EXCEPT SELECT A.* FROM T1 A, T1 B where A.C1=B.C1 AND
A.C2<B.C2;

Though, the following is AMAZINGLY efficient. Only a seq scan, plus some
post processing.

select distinct on (C1) C1, C2, C3, C4 from T1 order by C1, C2 desc;


I think that distinct/order by combination is best suited for your needs.

Does anyone know of a "master source of knowledge" where one could learn
to choose an appropriate formulation for a SQL query without trying all
of the imaginable possibilities with EXPLAIN?

Thank you all!

Antonio


wsheldah@lexmark.com wrote:

>
>In just eyeballing the various responses, it looks like the one using DISTINCT
>ON manages to avoid using a subquery at all. Would this give it the edge in
>performance? I had somehow never noticed the DISTINCT ON syntax before, this
>looks very handy.
>
>Also, my first attempt was to put the subquery in the WHERE clause, but I
>noticed that several put the subquery in the FROM clause. Does putting it in the
>FROM clause just run it once, with the results of the run joined to the outer
>tables? It certainly seemed like putting the query in the WHERE clause was
>running it for every row. Thanks,
>
>Wes Sheldahl
>
>
>
>Martijn van Oosterhout <kleptog%svana.org@interlock.lexmark.com> on 12/10/2001
>06:33:59 PM
>
>Please respond to Martijn van Oosterhout
>      <kleptog%svana.org@interlock.lexmark.com>
>
>To:   Chris Albertson <chrisalbertson90278%yahoo.com@interlock.lexmark.com>
>cc:   pgsql-general%postgresql.org@interlock.lexmark.com (bcc: Wesley
>      Sheldahl/Lex/Lexmark)
>Subject:  Re: [GENERAL] Need SQL help, I'm stuck.
>
>
>On Mon, Dec 10, 2001 at 01:42:54PM -0800, Chris Albertson wrote:
>
>>Help. I seem to have a case of "brain lock" and can't figure out
>>something that I should know is simple.
>>
>>Here is what I am trying to do.  Let's say I have a table called
>>T1 with columns C1, C2, C3, C4.  It contains data as follows
>>
>>  a  1  abcd  dfg
>>  a  2  cvfr  erg
>>  a  3  derg  hbg
>>  b  1  cccc  rth
>>  c  1  rdvg  egt
>>  c  2  derf  ett
>>
>>I want a SQL query that returns these rows
>>
>>  a  3  derg  hbg
>>  b  1  cccc  rth
>>  c  2  derf  ett
>>
>
>How about:
>
>select distinct on (C1) C1, C2, C3, C4 from T1 order by C1, C2 desc;
>--
>Martijn van Oosterhout <kleptog@svana.org>
>http://svana.org/kleptog/
>




В списке pgsql-general по дате отправления:

Предыдущее
От: teg@redhat.com (Trond Eivind Glomsrød)
Дата:
Сообщение: Re: RedHat6.2 - postgres 7.1.2 lib confusion
Следующее
От: Tom Lane
Дата:
Сообщение: Re: bug or my ignorance ?