Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 08/12/2010, 18h39   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 1
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 1
Points : 0
Points : 0
Par défaut Problème simple langage sqlite mais je débute

Bonjour,

Je vous expose mon probleme, j'ai une base de données sous sqlite, lorsque je tape cette commande :

Code :
1
2
3
SELECT vchFirstName
  FROM dvd, user
 WHERE user.iUserId = dvd.iUserId;
Je trouve ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
eleve6      
eleve6      
eleve1      
eleve1      
eleve4      
eleve4      
eleve2      
eleve2      
eleve2      
eleve2      
eleve5      
eleve5      
eleve5
Et mon probleme maintenant je voudrais rajouter quelque chose à ma commande (pour n'avoir a taper qu'une commande ) pour qu'il ne s'affiche que l'élève qui apparait le plus de fois dans cette liste donc ici l'élève 2.

Que faut-il rajouter à la commande ?

Merci !
- riko - est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 20h34   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 637
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 637
Points : 2 629
Points : 2 629
bonjour,


Je ne connais pas sqlite donc la syntaxe suivante risque de ne pas marcher.

En gros il faut que vous fassiez une sous requête qui va compter le nombre d'occurrence de chaque user et les classer. Ensuite ne prendre que les X premier.

En utilisant des fonctions de fenêtrages :
Code :
1
2
3
4
5
6
7
8
9
10
 
WITH tmp AS (
SELECT vchFirstName, rank() over(ORDER BY count(*) DESC) AS rnk
FROM dvd a
INNER JOIN user b ON a.iUserId = b.iUserId
GROUP BY vchFirstName)
 
SELECT vchFirstName
FROM tmp
WHERE rnk = 1
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 21h16   #3
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 552
Points : 552
Bonjour,
J'ai craint que sqllite ne connaisse pas les fonctions de fenêtrage ni les common table Expression. Voilà donc une requete qui en est dépourvu.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT vchFirstName
FROM user u
INNER JOIN 
	(	SELECT	a.iUserId,
			count(*) AS nbre_occurence
		FROM dvd
		GROUP BY  a.iUserId
	) AS  N
ON u.iUserId=N.iUserId
INNER JOIN 
(
	SELECT max(nbre ) AS max_nbre
	FROM
	(	SELECT a.iUserId, count(*)  AS nbre
		FROM dvd
		GROUP BY  a.iUserId
	) AS A
) AS B
ON N.nbre_occurence=A.max_nbre
J'espère que sqllite l'acceptera.
Soazig
soazig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 23h51   #4
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
vous pouvez aussi faire simplement

Code sql :
1
2
3
4
5
6
7
 
SELECT vchFirstName, count(*)  
FROM dvd, user
WHERE user.iUserId = dvd.iUserId;
GROUP BY vchFirstName
ORDER BY count(*) DESC
LIMIT 1
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/12/2010, 23h55   #5
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 637
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 637
Points : 2 629
Points : 2 629
ah oui bien vu, mais il me semble que l'order by ce fait en dernier dans une requete non ?

du coup le résultat avec le fetch first risque d'être aléatoire ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 00h39   #6
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
En fait je ne sais pas trop ou se met le LIMIT, je travaille sous MSSQL, et donc avec des SELECT TOP...

alors effectivement, le LIMIT est peut etre mal placé...

pourquoi un probleme avec fetch first ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 07h20   #7
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 552
Points : 552
Bonjour,
J'avais bien pensé au limit ou top, mais je ne connaissais pas la spécificité du dialecte sqllite, et effectivement selon les SGBD l'option en question est faite avant ou après l'order by.
Par exemple sous oracle where rownum <=1 et fait avant l'order by.
Soazig
soazig est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h43.


 
 
 
 
Partenaires

Hébergement Web