Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/03/2011, 15h29   #1
Membre Expert
 
Avatar de ludojojo
 
Homme Ludovic Solczynski
Développeur .NET
Inscription : avril 2008
Messages : 1 446
Détails du profil
Informations personnelles :
Nom : Homme Ludovic Solczynski
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2008
Messages : 1 446
Points : 2 179
Points : 2 179
Par défaut Traduction de MySql to PGSQL

Bonjour,
J'ai besoins de migrer une application utilisant base de données MySql vers du PGSQL...
Mon soucis c'est que je n'y connais rien en PGSQL...
Est ce qu'il existe un outil permettant de faire cela?

Sinon, j'aurais besoins de traduire cette requête :
Code :
1
2
3
4
SELECT date, SUM(count) AS total
FROM link 
GROUP BY LEFT( date, 7 )
HAVING Year(`date`) = MaDate;
Dans cette requête, je récupère toutes les données de ma table "link", puis je les regroupent par années sans prendre en compte le mois...
Une idée?
__________________
Aide les autres...
Et les autres t'aideront....
Mon site DVP
Mon site perso

N'oubliez pas de voter pour les messages dont la réponse est pertinente
ludojojo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 16h03   #2
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
Bonjour,

La colonne "date" est de quel type ? Date ou chaîne de caractères ?
Parce que la fonction LEFT n'existe pas, mais en fonction du type de cette colonne, on peut t'indiquer la fonction la mieux adaptée (substring, to_char...).

Au passage, c'est déconseillé d'utiliser des mots réservés pour nommer des colonnes (comme date, par exemple ).


ced
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 16h30   #3
Membre Expert
 
Avatar de ludojojo
 
Homme Ludovic Solczynski
Développeur .NET
Inscription : avril 2008
Messages : 1 446
Détails du profil
Informations personnelles :
Nom : Homme Ludovic Solczynski
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2008
Messages : 1 446
Points : 2 179
Points : 2 179
Citation:
Au passage, c'est déconseillé d'utiliser des mots réservés pour nommer des colonnes (comme date, par exemple ).
En effet vraiment pas top...

Mon champs date est de type date !
J'ai donc essayé de faire cela :
Code :
1
2
3
4
"SELECT date, SUM(count) AS total
FROM link 
Where  EXTRACT(ISOYEAR FROM date) = ".$i.
"GROUP BY EXTRACT(ISOYEAR FROM date)";
Dans cette requête mon $i correspondant à une variable php comprenant une année...
Malheureusement j'obtient une erreur :
Citation:
Error in SQL query: ERREUR: la colonne � link.date � doit appara�tre dans la clause GROUP BY ou doit �tre utilis� dans une fonction d'agr�gat at character 8
et je ne comprend pas pourquoi...
__________________
Aide les autres...
Et les autres t'aideront....
Mon site DVP
Mon site perso

N'oubliez pas de voter pour les messages dont la réponse est pertinente
ludojojo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 16h39   #4
Membre Expert
 
Avatar de ludojojo
 
Homme Ludovic Solczynski
Développeur .NET
Inscription : avril 2008
Messages : 1 446
Détails du profil
Informations personnelles :
Nom : Homme Ludovic Solczynski
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2008
Messages : 1 446
Points : 2 179
Points : 2 179
Après avoir avancé un peu, je pense que la requete que je cherche est celle-ci :
Code :
1
2
3
4
SELECT date, SUM(count) AS total
FROM link 
GROUP BY EXTRACT(MONTH FROM date)
HAVING EXTRACT(ISOYEAR FROM date) = 2011
M'ai j'obtient toujours le message d'erreur :
Citation:
ERREUR: la colonne « link.date » doit apparaître dans la clause GROUP BY ou doit être utilisé dans une fonction d'agrégat
LINE 1: SELECT date, SUM(count) AS total
Je ne comprend pas... Qu'elle est l'erreur?
__________________
Aide les autres...
Et les autres t'aideront....
Mon site DVP
Mon site perso

N'oubliez pas de voter pour les messages dont la réponse est pertinente
ludojojo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 17h06   #5
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
L'erreur vient de fait qu'il n'y a plus concordance entre ce qui est dans SELECT et ce qui est dans GROUP BY.
Dans la clause SELECT, tu as "date", alors que tu cherches à regrouper selon les mois.
Il faut donc plutôt quelque chose comme :
Code :
1
2
3
SELECT EXTRACT(MONTH FROM date) AS mois, SUM(count) AS total
FROM link 
GROUP BY EXTRACT(MONTH FROM date)
Au passage, le HAVING ne sert à rien dans le cas présent, il vaut mieux passer par la clause WHERE :
Code :
1
2
3
4
SELECT EXTRACT(MONTH FROM date) AS mois, SUM(count) AS total
FROM link 
WHERE EXTRACT(ISOYEAR FROM date) = 2011
GROUP BY EXTRACT(MONTH FROM date)
ced
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/03/2011, 17h30   #6
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Je suis toujours sidéré de voir la quantité monstrueuses de fautes qu'il y a dans les requêtes produites par les bidouilleurs de MySQL... (on ne peut pas appeler les gens qui font de telles requêtes des informaticiens, ni des développeurs, cela ferait honte aux professionnels !).

Nombre d'erreurs dans cette requête au minimum 4 :
1) date est un mot réservé de SQL. En principe on évite d'utiliser comme nom d'objet un mot réservé de SQL comme TYPE, DATE, CHAR, INDEX...
2) LEFT est une fonction de chaine.... appliquée à une date ! Résultat ???
3) on projette sur la colonne date complète (SELECT date) et on fait un groupage sur une partie de l'information de la colonne date (GROUP BY LEFT( date, 7))
4) on utilise au petit bonheur la chance des caractères accent grave pour délimiter de temps en temps un nom de colonne (spécificité MySQL... imbécile car possibilité de confusion avec des chaines de caractères.

Question : que fait cette requête ?

Commencez par apprendre le SQL : mon site comme mon bouquin, peuvent vous y aider....

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 17h34   #7
Membre Expert
 
Avatar de ludojojo
 
Homme Ludovic Solczynski
Développeur .NET
Inscription : avril 2008
Messages : 1 446
Détails du profil
Informations personnelles :
Nom : Homme Ludovic Solczynski
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2008
Messages : 1 446
Points : 2 179
Points : 2 179
Merci beaucoup !
Voici la version finale :
Code :
1
2
3
4
5
SELECT EXTRACT(MONTH FROM date) AS mois,  SUM(count) AS total
FROM link 
WHERE EXTRACT(ISOYEAR FROM date) = " .$i."
GROUP BY EXTRACT(MONTH FROM date)
ORDER BY EXTRACT(MONTH FROM date)";
__________________
Aide les autres...
Et les autres t'aideront....
Mon site DVP
Mon site perso

N'oubliez pas de voter pour les messages dont la réponse est pertinente
ludojojo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 17h47   #8
Membre Expert
 
Avatar de ludojojo
 
Homme Ludovic Solczynski
Développeur .NET
Inscription : avril 2008
Messages : 1 446
Détails du profil
Informations personnelles :
Nom : Homme Ludovic Solczynski
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2008
Messages : 1 446
Points : 2 179
Points : 2 179
Citation:
Envoyé par SQLpro Voir le message
Je suis toujours sidéré de voir la quantité monstrueuses de fautes qu'il y a dans les requêtes produites par les bidouilleurs de MySQL...
Je suis un peu décu de voir votre réaction.
Pour information, je suis développeur SharePoint, donc oui je fais de la bidouille quand il s'agit de php et de mysql!
Je n'avais encore jamais travaillé avec ces deux langages et étant donné que chaque langage à ses propres spécificités, cela est assez difficile d'en appréhender les nuances.
Je commence tout juste à me familliariser avec ces technologies, il est donc normal d'avoir des erreurs. Pour rappel, c'est pour cela que l'on viens sur les forums, demander de l'aide aux personnes qui sont compétantes!

Au passage, un grand merci à "ced" pour son aide.
__________________
Aide les autres...
Et les autres t'aideront....
Mon site DVP
Mon site perso

N'oubliez pas de voter pour les messages dont la réponse est pertinente
ludojojo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 17h05   #9
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Ce que je reproche à beaucoup de développeurs, c'est de se plonger dans le SQL sans jamais l'avoir appris et après solliciter les copains pour des erreurs ignobles de plus que débutant. Vous viendrais t-il à l'esprit de vous vendre en développeur sans maitriser un seul langage de dev ? Alors pourquoi ne pas commencer par apprendre SQL ???

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h27.


 
 
 
 
Partenaires

Hébergement Web