PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

SELECT nombre fixe de lignes en sautant uniformément les lignes

L'erreur de votre première tentative est que vous ne pouvez pas mélanger la fonction d'agrégation count(*) avec le non agrégé sélection de lignes. Vous pouvez résoudre ce problème en utilisant count() comme fonction d'agrégation de fenêtre à la place :

SELECT * FROM (
   SELECT *, ((row_number() OVER (ORDER BY "time"))
               % ceil(count(*) OVER () / 500.0)::int) AS rn
   FROM   data_raw
   ) sub
WHERE sub.rn = 0;

Explication détaillée ici :

@Alexander a un correctif pour votre dernière tentative.