Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1974 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [résolu] film le plus loué SQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu] film le plus loué SQL

n°1489155
karminator​98
Posté le 10-12-2006 à 02:31:09  profilanswer
 

bonjour à tous!
 
j'ai quelques petits problèmes d'SQL...
 
dans une table de location de vidéo, contenant les champs suivants : no_client, no_location, no_film   , je n'ai aucune idée comment écrire une query qui retourne le film le plus loué...
 
j'ai essayer de la façon suivante :
 
SELECT MAX(COUNT(*))
FROM location
GROUP BY no_location;
 
et
 
SELECT COUNT(no_film) as cnt
FROM locations
WHERE cnt >= ALL (SELECT COUNT(no_film) FROM locations GROUP BY no_film)
GROUP BY no_film;
 
aidez-moi s'il vous plait!


Message édité par karminator98 le 12-12-2006 à 21:16:45
mood
Publicité
Posté le 10-12-2006 à 02:31:09  profilanswer
 

n°1489498
polo021
Posté le 11-12-2006 à 12:49:04  profilanswer
 

SELECT MAX(COUNT(*))
FROM location
GROUP BY no_film;
ne fonctionne pas?

n°1489510
anapajari
s/travail/glanding on hfr/gs;
Posté le 11-12-2006 à 13:07:26  profilanswer
 

select no_film, count(*) from location group by no_film order by count(*) desc limit 1
 
A adapter en fonction de son sgbd ( particulièrement pour le limit)

n°1489548
polo021
Posté le 11-12-2006 à 14:26:45  profilanswer
 

select MAX(cnt) from (select count(*), no_film from location group by no_film) as v1
 
semble + rapide

n°1489571
anapajari
s/travail/glanding on hfr/gs;
Posté le 11-12-2006 à 14:52:34  profilanswer
 

polo021 a écrit :

select MAX(cnt) from (select count(*), no_film from location group by no_film) as v1

 

semble + rapide


 :pfff: nawak, ça peut pas être plus rapide vu que tu fais la même requête, que tu l'as met dans un table temporaire puis tu refais une requête dessus.
Et au passage tu perds l'information sur le film en question vu que tu ne remontes plus que "le plus grand nombre de fois où un film a été loué" sans savoir duquel il s'agit ....


Message édité par anapajari le 11-12-2006 à 14:52:53
n°1489610
polo021
Posté le 11-12-2006 à 15:33:20  profilanswer
 

:pt1cable: ha ben oui tu as tout a fait raison.
pour la rapidité, ca me semblait bizarre aussi mais c'est ce que me retournait l'analyseur. [:sinclaire]

n°1489671
Kilyn
Milé sek milé
Posté le 11-12-2006 à 16:46:33  profilanswer
 

SELECT no_film
FROM locations
GROUP bY no_film
HAVING COUNT(no_film) = (SELECT MAX(COUNT(no_film)) GROUP by no_film)

 

PS : Je ne garantie pas l'ordre des instructions.


Message édité par Kilyn le 11-12-2006 à 16:48:57

---------------
Nous ne sommes pas des êtres humains vivant une exprérience spirituelle. Nous sommes des êtres spirituels vivant une expérience humaine.
n°1490620
karminator​98
Posté le 12-12-2006 à 21:07:40  profilanswer
 

finalement, merci de m'avoir aidé... la réponse est :
 
SELECT no_film
FROM locations
GROUP BY no_film
HAVING COUNT(no_film) >= ALL (SELECT COUNT(no_film) FROM locations GROUP BY no_film);
 
du moins, c'est celle qui marche dans MySQL

n°1490721
anapajari
s/travail/glanding on hfr/gs;
Posté le 13-12-2006 à 09:57:53  profilanswer
 

nan mais faut arrêter la drogue les jeunes là....
C'est n'importe quoi la requete que tu viens d'écrire. La tu fais 2 scans sur ta table locations pour ... rien ...  
Donc je remets la "bonne requête" :

Code :
  1. select no_film, count(*) from location group by no_film order by count(*) desc limit 1


Et vous avez de la chance que MagicBuzz soit pas tombé sur ce poste o

n°1490804
Kilyn
Milé sek milé
Posté le 13-12-2006 à 12:16:16  profilanswer
 

anapajari a écrit :

nan mais faut arrêter la drogue les jeunes là....
C'est n'importe quoi la requete que tu viens d'écrire. La tu fais 2 scans sur ta table locations pour ... rien ...
Donc je remets la "bonne requête" :


Et vous avez de la chance que MagicBuzz soit pas tombé sur ce poste o

 

Mouais le limit 1 connaît pas. C'est du normalisé ?


---------------
Nous ne sommes pas des êtres humains vivant une exprérience spirituelle. Nous sommes des êtres spirituels vivant une expérience humaine.
mood
Publicité
Posté le 13-12-2006 à 12:16:16  profilanswer
 

n°1490843
franceso
Posté le 13-12-2006 à 14:04:50  profilanswer
 

Kilyn a écrit :

Mouais le limit 1 connaît pas. C'est du normalisé ?


Si j'en crois la doc de mySQL, oui : http://dev.mysql.com/doc/refman/4.1/en/select.html

n°1490849
loic_02800
Dehors les boulets :o
Posté le 13-12-2006 à 14:11:42  profilanswer
 

tiens on doit bosser sur la meme chose :d

n°1490851
sircam
I Like Trains
Posté le 13-12-2006 à 14:18:22  profilanswer
 

Kilyn a écrit :

Mouais le limit 1 connaît pas. C'est du normalisé ?


Du normalisé MySQL  [:airforceone]  


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1490856
anapajari
s/travail/glanding on hfr/gs;
Posté le 13-12-2006 à 14:36:28  profilanswer
 

oui ça n'a rien de standard, selon les sgbd ça s'écrit différement...
Genre sous db2 c'est "first first 1 rows only", mais bon si tu relis bien mon premier post c'est ce qui était marqué hein :o

n°1490865
sircam
I Like Trains
Posté le 13-12-2006 à 14:47:40  profilanswer
 

anapajari a écrit :

oui ça n'a rien de standard, selon les sgbd ça s'écrit différement...
Genre sous db2 c'est "first first 1 rows only", mais bon si tu relis bien mon premier post c'est ce qui était marqué hein :o


J'ai juste lu ton truc sur la drogue, et je me suis dit que ce serait bien d'aider les jeunes, moi aussi.  [:airforceone]  


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1490868
MagicBuzz
Posté le 13-12-2006 à 14:59:09  profilanswer
 

pour en revenir à tout ce borderl, si on ne dispose pas de "limit 1", "top 1" ou autre. genre on utilise Oracle et en chie pour utiliser rownum.
 
y'a une autre solution, toujours bêtement en reprenant calmement la problématique étape pas étape...
 
tous les films avec le nombre de locations :
 
select no_film, count(*)
from location
group by no_film
 
le plus grand nombre de locations :
 
select max(count(*)) from location group by no_film
 
maintenant, je veux le no_film où count() est le plus grand :
 
select no_film, cpt
from
(
select no_film, count(*) cpt
from location
group by no_film
)
where cpt = (select max(count(*)) from location group by no_film)


Message édité par MagicBuzz le 13-12-2006 à 14:59:39

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [résolu] film le plus loué SQL

 

Sujets relatifs
recuperer aleatoirement des donnees d'un tableau [RESOLU][PHP/MySQL][résolu] Images dans un BLOB -> <img src="...">
[résolu]Authentification php surprenante...[Résolu] Générer une nouvelle clé
[RESOLU] Recherche de quoi debugger du JS sous IE6Différence borders dans browsers - résolu
Différence de performance entre Access et SQL Server ?[Résolu] JDBC Taille memoire des resultset
détection javascript on [résolu][RESOLU] [AJAX] probleme d'envoi d'un "+" par POST
Plus de sujets relatifs à : [résolu] film le plus loué SQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR