MySQL : Faire un MAX

MySQL : Faire un MAX - SQL/NoSQL - Programmation

Marsh Posté le 01-03-2007 à 17:41:50    

Bonjour,
 
j'ai cette requète qui me retourne une colonne nommée QUANTITE, avec deux valeurs dedans (1 et 2).
 
Je souhaite selectionner la plus grande, comment intégrer le MAX...

SELECT COUNT(contenir.idPiz) as Quantite  
FROM contenir  
WHERE contenir.idPiz='1'  
UNION SELECT COUNT(contenir.idPiz) as Quantite  
FROM contenir  
WHERE contenir.idPiz='2'

 
Merci  :jap:

Reply

Marsh Posté le 01-03-2007 à 17:41:50   

Reply

Marsh Posté le 01-03-2007 à 18:39:48    

mets un select autour des deux autres:

Code :
  1. SELECT max(A.Quantite) FROM ( tonbouzin ) AS A


 
Mais bon ton union ne sert pas a grande chose :o

Reply

Marsh Posté le 01-03-2007 à 19:06:26    

Merci.
 
Comment puis-je faire un deux en un sans le UNION ?

Reply

Marsh Posté le 02-03-2007 à 06:14:30    

Bonjour,

 

Et comme ça (pour mysql) :

 

SELECT COUNT(contenir.idPiz) as Quantite  
FROM contenir  
WHERE contenir.idPiz in (1, 2)  
GROUP BY contenir.idPiz
ORDER BY Quantite DESC
LIMIT 0, 1


Message édité par jeca le 02-03-2007 à 06:17:03
Reply

Marsh Posté le 02-03-2007 à 08:10:02    

:sweat:
 
finalement, Oracle c'est pas si mal avec leur "oubli" de mettre une fonction "simple" pour limiter le nombre de résultats.
 
pensez aux gens qui vont fait la maintenance derrière vous bordel !
 
je veux bien qu'il est 8h et que j'ai la tête dans le cul, mais là, jeca, faut pas pousser :
-> entre les champs de la clause group by qui ne figurent pas dans la liste des champs sélectionnés (heureusement ça plante sur la plupart des SGBD) et le limit des familles pour éviter un max qui aurait le mérite d'être lisible... là c'est carton rouge direct.
t'as RIEN économisé niveau performances, c'est une ânerie que de le croire. niveau syntaxe, t'as économisé l'écriture d'une vingtaine de caractères, et par contre, pour le gars qui va repasser derrière toi sur un gros projet, ça tu vas gagner un bon lot d'insultes, et lui de migraines. sans parler du client qui va gagner un bon lot de bugs le temps que tout soit réécrit derrière toi, faute d'être maintenable.
 
bref, arrêtez d'écrire un code pareil, et d'ensuite le conseiller aux autres.
 
LIMIT, ça sert pas à faire des MAX
GROUP BY ne doit contenir que des éléments retrouvés dans le SELECT
 
Bon, ceci dit, ta requête marche effetivement très bien :jap:
 
(MagicBuzz de mauvais poil parcequ'il vient de se renverser son bol de café sur le calbut)


Message édité par MagicBuzz le 02-03-2007 à 08:10:54
Reply

Marsh Posté le 02-03-2007 à 09:31:51    

c'est vendredi :o

 

Mais sinon je suis d'accord avec toi Magic, la requete telle qu'écrit par jeca est vraiment ... pas super .
Quand moi je parlais de virer l'union, c'était plus comme ça:

Code :
  1. SELECT max(R.Quantite) FROM
  2. (SELECT contenir.idPiz, COUNT(contenir.idPiz) AS Quantite  
  3. FROM contenir  
  4. WHERE contenir.idPiz='1'  OR  contenir.idPiz='2'
  5. GROUP BY contenir.idPiz) R


Message édité par anapajari le 02-03-2007 à 09:32:08
Reply

Marsh Posté le 02-03-2007 à 11:18:00    

oui oui, j'adhérait à ta solution à 100% ;)
 
on peut utiliser un IN aussi au lieu du OR, ça évite les surprises si on doit ajouter un autre critère :)


Message édité par MagicBuzz le 02-03-2007 à 11:18:44
Reply

Marsh Posté le 02-03-2007 à 17:55:03    

Merci de votre aide !  :)  
 
Autre question, j'ai ça :
 
SELECT max(A.nb)
FROM (SELECT sum(qte) as Nb, nomPiz FROM contenir as C, pizza as P WHERE C.idPiz=P.idPiz GROUP BY P.idPiz) as A

 
La requète du FROM me permet d'extraire ça :
 
Pizza         | Quantité
------------------------
4 fromages | 5
chèvre       |7
 
Le max me permet ensuite de recupérer la quantité la plus grande, mais je perds le nom de la pizza...
 
Comment le récuperer ?
 
Merci

Reply

Marsh Posté le 03-03-2007 à 12:53:19    

mon dieu, quelle horreur...

Reply

Marsh Posté le 03-03-2007 à 14:57:28    

Tamahome a écrit :

mon dieu, quelle horreur...


Merci, ce genre de remarque fait avancer...  :sarcastic:

Reply

Marsh Posté le 03-03-2007 à 14:57:28   

Reply

Marsh Posté le 03-03-2007 à 17:11:36    

pourquoi une remarque devrait elle obligatoirement te faire avancer ? T'es pas a l'ecole ici hein :sarcastic: Ton code SQL est d'une mocheté sans nom (sérieux un Union pour faire ca...)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed