sql >> Databasteknik >  >> RDS >> PostgreSQL

Jag behöver en funktion för att välja 88 slumpmässiga rader från en tabell (utan dubbletter)

Här är en snabb lösning som du kanske gillar:

CREATE EXTENSION IF NOT EXISTS tsm_system_rows;

     select * from task 
tablesample system_rows (88);

Som referens finns TABLESAMPLE i dokumenten för SELECT:https://www. postgresql.org/docs/current/sql-select.html

Här är en ganska bra beskrivning av funktionen:

https://www.2ndquadrant.com/ sv/blog/tablesample-in-postgresql-9-5-2/

...och ett annat stycke om det allmänna ämnet slumpmässigt urval av samma författare:

https://www. 2ndquadrant.com/en/blog/tablesample-and-other-methods-for-getting-random-tuples/

tsm_system_rows är en av två standardsamplingstillägg, dokumenterad här:https:/ /www.postgresql.org/docs/current/tsm-system-rows.html

Hallå! Jag är glad att du ställde den här frågan. Jag brukar använda BERNOULLI-metoden, som är inbyggd i SELECT ur lådan, men den är baserad på en procentsats. Jag har precis provat detta och det fungerar bra:

select * from task 
tablesample BERNOULLI (1)
limit 88



  1. Jämför fyra ledande databas-IDE-verktyg

  2. SQL - Skillnaden mellan COALESCE och ISNULL?

  3. Välj TOP N och BOTTOM N

  4. Hur fungerar parametern 'LIMIT' i sql?