Compter le nombre de valeurs différentes

Compter le nombre de valeurs différentes - SQL/NoSQL - Programmation

Marsh Posté le 09-03-2016 à 09:50:15    

Bonjour,
 
Je suis novice en SQL et je rencontre un problème avec une requête.
Je souhaite compter le nombre de lignes différentes dans une table mais avec une difficulté supplémentaire :
Pouvoir compter avec une comparaison sur la ligne précédente.
 
Pour la petite explication, voici un extrait du champ où je souhaite faire ce calcul :
 
article
W1010204 -> valeur 1
W1010064
W1010064 -> valeur 2
W1010059 -> valeur 3
W1010064 -> valeur 4
W1010059 -> valeur 5
W1010059
W1010156 -> valeur 6
W1916003 -> valeur 7
W1916003
W1916132 -> valeur 8
W1916132
W1916131 -> valeur 9
W1916131
W1916132 -> valeur 10
 
J'ai bien sur essayé avec un SELECT COUNT(article) FROM maTable qui me renvoie bien 15 entrées et un SELECT COUNT(DISTINCT article) FROM maTable qui me renvoie 7 entrées.
Mais ce que j'aimerai, c'est que la requete me renvoie 10 entrées.
 
J'espère avoir été assez clair.
 
Merci pour votre aide.

Reply

Marsh Posté le 09-03-2016 à 09:50:15   

Reply

Marsh Posté le 09-03-2016 à 16:10:07    

Pour résoudre ton problème, il faudrais l'ensemble de ta table.
 
Sur quoi est fait le tri pour qu'il s'affiche comme dans ta liste?

Reply

Marsh Posté le 09-03-2016 à 17:26:51    

Voici la table complète :
 
ID HEURE DATE        QTY ARTICLE COLOR
1 111019 20160304 60 W1010204 GAN
2 111040 20160304 1 W1010064 G11
3 111041 20160304 20 W1010064 G11
4 111051 20160304 18 W1010064 97
5 111052 20160304 4 W1010064 97
6 111053 20160304 2 W1010064 97
7 111060 20160304 4 W1010059 BC2
8 111063 20160304 1 W1010064 GTO
9 111064 20160304 1 W1010064 GAN
10 111065 20160304 2 W1010059 916
11 111066 20160304 1 W1010059 GAN
12 111067 20160304 1 W1010156 BC2
13 111069 20160304 2 W1916003 BC2
14 111071 20160304 5 W1916003 BC2
15 111074 20160304 1 W1916132 0
16 111075 20160304 3 W1916132 J24
17 111076 20160304 5 W1916132 G39
18 111077 20160304 1 W1916132 G39
19 111079 20160304 2 W1916131 NST
20 111080 20160304 2 W1916131 VI5
21 111081 20160304 4 W1916131 20M
22 111082 20160304 1 W1916131 GAN
23 111083 20160304 2 W1916131 NST
24 111084 20160304 2 W1916131 0
25 111085 20160304 21 W1916131 GAN
26 111091 20160304 22 W1916132 BC2
 
Je ne fais aucun tri, l'extraction est simplement un SELECT * FROM maTable
 

Reply

Marsh Posté le 10-03-2016 à 14:33:29    

En MySQL, ça donne un truc comme ça (mais c'est pas propre) :

Code :
  1. SET @pos1 =0;
  2. SET @pos2 =0;
  3. SELECT TmpP2.article AS ValeurArticle
  4. FROM
  5. (SELECT (@pos1 := @pos1 + 1) AS NumLigne, p1.id, p1.article FROM Produits p1 ORDER BY p1.id) AS TmpP1
  6. INNER JOIN
  7. (SELECT (@pos2 := @pos2 + 1) AS NumLigne, p2.id, p2.article FROM Produits p2 ORDER BY p2.id) AS TmpP2
  8. ON (TmpP2.NumLigne = (TmpP1.NumLigne - 1))
  9. WHERE TmpP1.article <> TmpP2.article
  10. UNION ALL
  11. SELECT TmpP3.article AS ValeurArticle
  12. FROM (SELECT 1 AS NLigne, p3.id, p3.article FROM Produits p3 ORDER BY p3.id DESC LIMIT 0, 1) AS TmpP3
  13. INNER JOIN
  14. (SELECT 1 AS NLigne, p4.id, p4.article FROM Produits p4 ORDER BY p4.id DESC LIMIT 1, 1) AS TmpP4
  15. ON (TmpP3.NLigne = TmpP4.NLigne)
  16. WHERE TmpP3.article <> TmpP4.article


 
Edit : j'ai testé sur le jeu de données mis dans ton premier post : ça marche... Pour leur ORDER BY id, faut vérifier si c'est bien cette colonne qui sert de tri pour ordonner tes articles (qui permet donc de calculer les n° de lignes).
Après, y'a peut-être plus simple que ce que j'ai fait :/


Message édité par rufo le 10-03-2016 à 14:35:35

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

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