OVH Cloud OVH Cloud

question sql

6 réponses
Avatar
Sebho
Bonjour, petite question langage sql

pour trouver la chaine de caractère la plus répendue dans un champ , quelle
serai la syntaxe de la requete

ex : trouver les 6 noms de famille le plus répendu dans une table

merci pour vote aide

Seb

6 réponses

Avatar
Zoury
Salut Sebho! :O)

Voici un exemple basé sur NorthWind qui te sort les 6 categories contenant
le plus de produits :

select top 6
c.categoryname,
sum(1) as Total
from products p inner join
categories c on p.categoryid = c.categoryid
group by c.categoryname
order by Total desc


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
"Sebho" a écrit dans le message de
news:
Bonjour, petite question langage sql

pour trouver la chaine de caractère la plus répendue dans un champ ,


quelle
serai la syntaxe de la requete

ex : trouver les 6 noms de famille le plus répendu dans une table

merci pour vote aide

Seb





Avatar
Fred BROUARD
Et non, cette requête est incorrecte parce qu'elle ne prendra pas en compte les ex aequo...

Exemple :


DUPONT
DUPONT
DUPONT

DURAND
DURAND
DURAND

MARTIN
MARTIN
MARTIN

DUPOND
DUPOND
DUPOND

DUBOIS
DUBOIS
DUBOIS

DUVAL
DUVAL
DUVAL

DUGLAND
DUGLAND
DUGLAND

Ta requête sortira :

DUPONT 3
DURAND 3
MARTIN 3
DUPOND 3
DUBOIS 3
DUVAL 3

Alors que la bonne réponse pour les 6 premiers devrait comporter les 7 références !

La solution est un peu plus complexe...
Il faut imbriquer deux requêtes, faire un comptage et appliquer un filtre WHERE.

J'ai développé cela dans mon bouquin aux pages 320 à 326.

A +



Zoury a écrit:
Salut Sebho! :O)

Voici un exemple basé sur NorthWind qui te sort les 6 categories contenant
le plus de produits :

select top 6
c.categoryname,
sum(1) as Total
from products p inner join
categories c on p.categoryid = c.categoryid
group by c.categoryname
order by Total desc





--
Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
Patrice
Dans le cas de SQL Server, il existe une clause "WITH TIES" qui permet à
priori d'inclure les ex-aequo...

Patrice


"Fred BROUARD" a écrit dans le message de
news:
Et non, cette requête est incorrecte parce qu'elle ne prendra pas en


compte les ex aequo...

Exemple :


DUPONT
DUPONT
DUPONT

DURAND
DURAND
DURAND

MARTIN
MARTIN
MARTIN

DUPOND
DUPOND
DUPOND

DUBOIS
DUBOIS
DUBOIS

DUVAL
DUVAL
DUVAL

DUGLAND
DUGLAND
DUGLAND

Ta requête sortira :

DUPONT 3
DURAND 3
MARTIN 3
DUPOND 3
DUBOIS 3
DUVAL 3

Alors que la bonne réponse pour les 6 premiers devrait comporter les 7


références !

La solution est un peu plus complexe...
Il faut imbriquer deux requêtes, faire un comptage et appliquer un filtre


WHERE.

J'ai développé cela dans mon bouquin aux pages 320 à 326.

A +



Zoury a écrit:
> Salut Sebho! :O)
>
> Voici un exemple basé sur NorthWind qui te sort les 6 categories


contenant
> le plus de produits :
>
> select top 6
> c.categoryname,
> sum(1) as Total
> from products p inner join
> categories c on p.categoryid = c.categoryid
> group by c.categoryname
> order by Total desc
>
>

--
Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************



Avatar
Zoury
tiens c'est vrai, et j'avais jamais pensé à ça.. :O/
Avatar
Zoury
Merci pour le tip. Ce sera très pratique. ;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Avatar
Sebho
merci bcp à tous
Seb


"Zoury" a écrit dans le message de
news:
tiens c'est vrai, et j'avais jamais pensé à ça.. :O/