Il est pas tout à fait clair comment vos 50 premières lignes sont identifiées et dans quel ordre ils doivent être retournés. Il n'y a pas d '"ordre naturel" dans les tables d'une base de données relationnelle. Aucune garantie sans explicite ORDER BY
.
Cependant, il est un ordre physique actuel de lignes que vous pouvez (ab-) utiliser. Et par défaut, c'est l'ordre dans lequel les lignes ont été insérées - tant que rien d'autre n'est arrivé à cette table. Mais le SGBDR est libre de changer l'ordre physique à tout moment, donc l'ordre physique n'est pas fiable. Les résultats peuvent et vont changer avec les opérations d'écriture dans la table (y compris VACUUM
ou d'autres commandes d'utilitaire). Appelons votre colonne utilisée pour trier après 50 lignes sort_col
.
( -- parentheses required
TABLE yellow_tripdata_staging LIMIT 50
)
UNION ALL
( -- parentheses required
SELECT *
FROM (TABLE yellow_tripdata_staging OFFSET 50) sub
ORDER BY sort_col
);
Plus explication (incl. TABLE
et entre parenthèses):
Ou, en supposant sort_col
est défini NOT NULL
:
SELECT *
FROM yellow_tripdata_staging
ORDER BY CASE WHEN row_number() OVER() > 50 THEN sort_col END NULLS FIRST;
La fonction de fenêtre row_number()
est autorisé à apparaître dans la clause ORDER BY
.
row_number() OVER()
(avec la clause vide OVER
) joindra les numéros de série en fonction de l'ordre physique actuel des lignes - toutes les clauses de non-responsabilité ci-dessus s'appliquent toujours.
L'expression CASE
remplace les 50 premiers numéros de ligne par NULL, triés en premier en raison de NULLS FIRST
joint. En effet, les 50 premières lignes ne sont pas triées, le reste est trié par sort_col
.
Ou, si vous voulez dire en fait de prendre les 50 premières lignes selon sort_col
et les laisser non triés, tandis que le reste est à trier:
Ou, si vous voulez juste aller chercher les "premières" 50 rangées selon l'ordre physique actuel ou d'autres critères non divulgués (plus fiables), vous avez besoin d'une sous-requête ou d'un CTE pour trier ces 50 rangées dans l'extérieur SELECT
:
SELECT *
FROM (TABLE yellow_tripdata_staging LIMIT 50) sub
ORDER BY sort_col;
Vous devez définir clairement vos besoins.
Les «50 premières lignes» d'une table SQL ou d'un jeu de résultats non ordonné sont inconnus. Vous devez être plus précis sur ce que vous voulez accomplir. –
oh oui, c'était comme tu l'as dit dans "juste pour aller chercher" le premier "50 rangs selon l'ordre physique actuel" j'ai oublié cette question –