Maison > base de données > tutoriel mysql > PostgreSQL vs MySQL GROUP BY : Comment obtenir le comportement de regroupement de MySQL dans PostgreSQL ?

PostgreSQL vs MySQL GROUP BY : Comment obtenir le comportement de regroupement de MySQL dans PostgreSQL ?

Patricia Arquette
Libérer: 2025-01-11 08:24:42
original
769 Les gens l'ont consulté

PostgreSQL vs. MySQL GROUP BY: How to Achieve MySQL's Grouping Behavior in PostgreSQL?

Différences de GROUP BY entre PostgreSQL et MySQL

Il existe des différences dans la syntaxe GROUP BY de MySQL et PostgreSQL, ce qui conduit souvent à des erreurs telles que "La colonne X doit apparaître dans la clause GROUP BY".

Comportement GROUP BY de MySQL

Dans MySQL, la requête suivante renverra une ligne pour chaque valeur unique dans la colonne bookdate :

<code class="language-sql">SELECT `availables`.*
FROM `availables`
INNER JOIN `rooms` ON `rooms`.id = `availables`.room_id
WHERE (rooms.hotel_id = 5056 AND availables.bookdate BETWEEN '2009-11-22' AND '2009-11-24')
GROUP BY availables.bookdate
ORDER BY availables.updated_at</code>
Copier après la connexion

Exigences GROUP BY pour PostgreSQL

Cependant, dans PostgreSQL, les colonnes qui ne sont pas explicitement incluses dans la clause GROUP BY ou utilisées dans les fonctions d'agrégation doivent faire partie de la clé primaire. Dans la requête ci-dessus, availables.id n'est ni inclus dans GROUP BY ni utilisé dans l'agrégation, provoquant ainsi l'erreur.

Simuler le comportement de MySQL

Afin de simuler le comportement GROUP BY de MySQL dans PostgreSQL, vous pouvez utiliser DISTINCT ON au lieu de GROUP BY :

<code class="language-sql">SELECT DISTINCT ON (availables.bookdate) availables.*
FROM availables
INNER JOIN rooms ON rooms.id = availables.room_id
WHERE (rooms.hotel_id = 5056 AND availables.bookdate BETWEEN '2009-11-22' AND '2009-11-24')
ORDER BY availables.bookdate, availables.updated_at</code>
Copier après la connexion

DISTINCT ON garantit l'unicité des colonnes spécifiées tout en préservant l'ordre spécifié dans la clause ORDER BY. Cette syntaxe simule la capacité de MySQL à renvoyer une seule ligne d'enregistrements par une valeur unique dans la colonne bookdate.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal