Thank you for the clarification. Le ven. 5 mai 2023 à 16:16, David G. Johnston <david.g.johns...@gmail.com> a écrit :
> 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. >