film le plus loué SQL [résolu] - SQL/NoSQL - Programmation
Marsh Posté le 11-12-2006 à 12:49:04
SELECT MAX(COUNT(*))
FROM location
GROUP BY no_film;
ne fonctionne pas?
Marsh Posté le 11-12-2006 à 13:07:26
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)
Marsh Posté le 11-12-2006 à 14:26:45
select MAX(cnt) from (select count(*), no_film from location group by no_film) as v1
semble + rapide
Marsh Posté le 11-12-2006 à 14:52:34
polo021 a écrit : select MAX(cnt) from (select count(*), no_film from location group by no_film) as v1 semble + rapide |
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 ....
Marsh Posté le 11-12-2006 à 15:33:20
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.
Marsh Posté le 11-12-2006 à 16:46:33
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.
Marsh Posté le 12-12-2006 à 21:07:40
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
Marsh Posté le 13-12-2006 à 09:57:53
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 :
|
Et vous avez de la chance que MagicBuzz soit pas tombé sur ce poste o
Marsh Posté le 13-12-2006 à 12:16:16
anapajari a écrit : nan mais faut arrêter la drogue les jeunes là.... |
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é ?
Marsh Posté le 13-12-2006 à 14:04:50
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
Marsh Posté le 13-12-2006 à 14:18:22
Kilyn a écrit : Mouais le limit 1 connaît pas. C'est du normalisé ? |
Du normalisé MySQL
Marsh Posté le 13-12-2006 à 14:36:28
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
Marsh Posté le 13-12-2006 à 14:47:40
anapajari a écrit : oui ça n'a rien de standard, selon les sgbd ça s'écrit différement... |
J'ai juste lu ton truc sur la drogue, et je me suis dit que ce serait bien d'aider les jeunes, moi aussi.
Marsh Posté le 13-12-2006 à 14:59:09
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)
Marsh Posté le 10-12-2006 à 02:31:09
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