On Fri, May 5, 2023 at 6:55 AM Sky Lendar <skylen...@gmail.com> wrote:
> Hi there ans thx for reading and answering this post if you can: > > Let's regard an example of a table (stars) containing a code for a star > (symb) > and its index (nb) in a file. > > > nb | symb > ----+------------ > 0 | alTau > 1 | alTau > 2 | bePer > 3 | alSco > 4 | alLeo > 5 | alCMa > 6 | alVir > 7 | Trappist-1 > 8 | SgrA* > 9 | SgrA* > 10 | GA > 11 | VC > 12 | M31 > 13 | M44 > 14 | alUMi > 15 | M87 > 16 | alCyg > 17 | alCyg > 18 | beOri > 19 | omiCet > 20 | epTau > 21 | epCas > 22 | alAnd > 23 | alAnd > 24 | beAnd > 25 | ga-1And > 26 | ga-1And > 27 | ga-1And > 28 | ga-1And > 29 | xiAnd > 30 | upAnd > 31 | upAnd > 32 | 14And > 33 | 51And > 34 | M31 > 35 | alAql > 36 | alAql > 37 | beAql > 38 | gaAql > 39 | deAql > 40 | epAql > 41 | zeAql > 42 | zeAql > 43 | etAql > 44 | thAql > 45 | ioAql > 46 | laAql > 47 | xiAql > 48 | 12Aql > 49 | alAqr > 50 | alAqr > 51 | beAqr > 52 | gaAqr > 53 | gaAqr > 54 | deAqr > 55 | epAqr > 56 | epAqr > 57 | ze-1Aqr > 58 | etAqr > 59 | etAqr > 60 | thAqr > 61 | kaAqr > 62 | laAqr > 63 | laAqr > 64 | laAqr > 65 | laAqr > 66 | nuAqr > 67 | piAqr > 68 | xiAqr > 69 | Trappist-1 > 70 | alAra > 71 | muAra > 72 | alAri > 73 | beAri > 74 | beAri > 75 | gaAri > 76 | deAri > 77 | 39Ari > 78 | 41Ari > 79 | alAur > 80 | alAur > 81 | beAur > 82 | deAur > 83 | epAur > 84 | epAur > 85 | epAur > 86 | zeAur > 87 | zeAur > 88 | zeAur > 89 | zeAur > 90 | etAur > 91 | etAur > 92 | thAur > 93 | thAur > 94 | thAur > 95 | ioAur > 96 | ioAur > 97 | ioAur > 98 | alBoo > 99 | alBoo > > Notice that some symbs are duplicated and I want to select only the > distinct symbs. > So, I could use > > select distinct on(symb) * from stars; > > I get this result: > > nb | symb > ----+------- > 48 | 12Aql > 32 | 14And > 77 | 39Ari > 78 | 41Ari > 33 | 51And > 10 | GA > 34 | M31 > 13 | M44 > 15 | M87 > 9 | SgrA* > > Notice that 12 is missing in the list. > Even with x as (select distinct on(symb) * from stars) select * from x > where nb = 12 order by nb; > nb = 12 is a duplicate with np = 34 Since your DISTINCT ON *subquery* doesn't specify an ordering which of those two are chosen as the representative record for M31 is non-determinstic. If you want to ensure the lowest valued nb is chosen you need to sort the *subquery*. The first record the DISTINCT encounters is the one selected to represent. Sorting in the outer/main query happens after the DISTINCT and so the record is already gone. David J.