MAX(COUNT(*))

MAX(COUNT(*)) - SQL/NoSQL - Programmation

Marsh Posté le 02-04-2007 à 13:37:21    

salut j'aimerais sélectionner un max count(*) en db2
 
select max(count(*)), champ from table group by champ ne fonctionne pas.
 
select max(tutu), champ from (select count(*) as tutu, champ from table group by champ
ne fonctionne pas non plus.
Mais fonctionne si je n'affiche pas le champ.
 
merci de votre aide

Reply

Marsh Posté le 02-04-2007 à 13:37:21   

Reply

Marsh Posté le 02-04-2007 à 14:05:38    

faut faire une sous requete nan ?

Reply

Marsh Posté le 02-04-2007 à 14:35:43    

J'hésite entre "tu veux le plus grand count pour chacun des champs" ou tu veux l'element présent le plus de fois dans ta table.

 

On va dire le deuxième vu que le 1er voudrait rien dire . Si ta table n'est pas trop grosse tu peux ruser avec fetch/optimize mais c'est super pas optimisé:

Code :
  1. select tonchamp, count(*) from tatable group by tonchamp order by count(*) desc fetch first 1 rows only optimize for 1 rows


Sinon t'es bon pour passer par une sous requete


Message édité par anapajari le 02-04-2007 à 14:36:34
Reply

Marsh Posté le 02-04-2007 à 14:36:30    

+1
 
t'as deux niveaux de regroupement, ce qui impose deux niveaux de requête :
 
select max(nb)
from
(
  select count(*)
  from matable
  group by mestrucs à compter
)
 
en une seule passe, mais moins sexy :
 
select top 1 count(*) nb
from matable
group by mes trucs à compter
order by nb desc

Reply

Marsh Posté le 03-04-2007 à 11:38:12    

merci anapjari, j'avais pensé à ta requete mais je ne la trouve pas tres standard.
 
Je préfère utiliser celle de magicbuzz qui est la meme que celle que j'ai proposé ds mon poste  
select max(tutu) from (select count(*) as tutu, champ from table group by champ
 
mais le problème est que je ne peux pas afficher le champ pour lequel j'ai compté le maximum.

Reply

Marsh Posté le 03-04-2007 à 11:59:15    

comment ça tu ne peux pas l'afficher ?

Reply

Marsh Posté le 04-04-2007 à 16:52:46    

select max(tutu) from (select count(*) as tutu, champ from table group by champ   ceci fonctionne
 
select max(tutu), champ from (select count(*) as tutu, champ from table group by champ     ceci ne fonctionne pas

Reply

Marsh Posté le 04-04-2007 à 17:00:30    

et tu es ... surpris ??? :o
T'as pas l'impression qu'il manque un bout  à ta requête?
 
Mais de toute façon, etant donné que tu as déjà un aggregat sur champ dans  ta sous requête, le max du count sera égal au count.

Reply

Marsh Posté le 05-05-2009 à 11:08:09    

Pour récupérer l'élément (ou les éléments) qui a le plus grand "MAX de COUNT" je proposerais bien la solution suivante :
 

SELECT champ
FROM (
       SELECT count(*) as nbVal, champ  
       FROM table  
       GROUP BY champ
     )
 
WHERE nbVal =  
          (  
             SELECT max(tutu)  
             FROM (
                    SELECT count(*) as tutu, champ  
                    FROM table
                    GROUP BY champ
                  )
          )


 
Avec une vue intermédiaire, ce serait certainement plus lisible et peut être également plus léger pour le SGBD


Message édité par jibe555 le 05-05-2009 à 11:09:59
Reply

Sujets relatifs:

Leave a Replay

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