sql

sql - Programmation

Marsh Posté le 16-05-2001 à 14:48:15    

soit une table avec 2 champs x et y:
je cherche a compter le nombre d'occurences de valeurs distinctes de x et y  
en gros, si c'etait possible:
'select count(distinct x, y) from table'
 
merci pour votre aide!!!!

Reply

Marsh Posté le 16-05-2001 à 14:48:15   

Reply

Marsh Posté le 16-05-2001 à 14:51:44    

select count (distinct x), count (distinct y) from table
 
 
Curieusement, ça marche :o

Reply

Marsh Posté le 16-05-2001 à 14:54:41    

je me suis mal exprime:
je veux compter toutes les valeurs du 'couple xy
alors?

Reply

Marsh Posté le 16-05-2001 à 14:54:47    

je me suis mal exprime:
je veux compter toutes les valeurs du 'couple xy
alors?

Reply

Marsh Posté le 16-05-2001 à 14:59:09    

Si ces 2 champs appartiennent à la même table, il y a le même nombre de valeurs pour les 2 donc tu compte soit l'un soit l'autre. Si des fois ils sont null tu les exclus de la requète:
 
select count(x) where x!=null and y!=null;

Reply

Marsh Posté le 16-05-2001 à 15:01:36    

Sinon précise mieux ta question!

Reply

Marsh Posté le 16-05-2001 à 15:03:33    

en fait ma table na pas que 2 champs:
exemple la table suivante:
 
 X  Y  Z
 
 1  2  3
 1  2  4
 2  3  5
 
je veux connaitre le nombre d'occurences de valeurs distinctes des colonnes x et y:
ici '2'  : x=1 y= 2 et x=2 y=3
 
desole si je ne suis pas clair.....

Reply

Marsh Posté le 16-05-2001 à 15:21:05    

Voilà une idée, sinon je vois pas :
 
Tu fait un cout(*) from table; pour avoir le nombre de couple x,y y compris les doublons : select count(*) from table;
Ensuite tu retranche le nombre de doublons!
Pour connaître le nombre de doublons, tu fais une jointure de la table sur elle même:  
select count(*) from table A, table B
where A.x=B.x and A.y=B.y;
 
Et voilà:
(select count(*) from table;)
-
(select count(*)from table A,table B where A.x=B.x and A.y=B.y ;)
 
 
Dis moi si  ça marche mais normalement oui

Reply

Marsh Posté le 16-05-2001 à 15:31:42    

la deuxieme requete ne donne pas le nombre de doublons:
si ta table n'a qu'une ligne ta requete te donnera '1'
j'ai trouve un moyen en utilisant les parametres db2
meci a tous pour votre aide

Reply

Marsh Posté le 16-05-2001 à 15:34:23    

Donne ta solution alors une fois que tu auras trouvé un moyen.

Reply

Marsh Posté le 16-05-2001 à 15:34:23   

Reply

Marsh Posté le 16-05-2001 à 15:42:20    

la soluce:
select distinct x,y from table
le systeme me donne le nombre de lignes retournées
mais bon, j'aurai bien aimé le faire avec une requete

Reply

Marsh Posté le 16-05-2001 à 15:46:41    

OK j'arrive, je vais te trouver ça, j'ai la soluce en tête :)
Une clope et ça repart.

Reply

Marsh Posté le 16-05-2001 à 15:46:54    

cris_2_1000 a écrit a écrit :

la soluce:
select distinct x,y from table
le systeme me donne le nombre de lignes retournées
mais bon, j'aurai bien aimé le faire avec une requete




 
et SELECT count(*) FROM ( SELECT distinct x,y FROM table) ?

Reply

Marsh Posté le 16-05-2001 à 15:55:23    

>benb
 
ca marche pas; j'ai essaye
et je me demande si ca n'est pas propre a DB2....

Reply

Marsh Posté le 16-05-2001 à 15:58:53    

cris_2_1000 a écrit a écrit :

>benb
 
ca marche pas; j'ai essaye
et je me demande si ca n'est pas propre a DB2....




malheureusement sous Oracle ca marche...

Reply

Marsh Posté le 16-05-2001 à 16:05:30    

Code :
  1. select  count (distinct convert(varchar(10), x) + convert(varchar(10), y))
  2. from table


 
Marche sous Sybase.
 
Bon, c'est tordu ; il faut que tu convertisses en un varchar assez grand pour le type de données.

Reply

Marsh Posté le 16-05-2001 à 16:18:58    

BEN>
Ca marche mais c'est pas conventionnel!
C'est contradictoire avec la théorie, je veut dire par là que c'est pas conforme.
Mais bon, c'est juste pour info, je prétends rien!
un select ... from (select...) tu verra jamais ça dans les bouquins et un prof t'égorge direct.
Même si j'ai déjà fait des requètes comme ça, c'est tentant mais je me suis fait rappeler à l'ordre.
Il y a toujours un moyen de faire autrement!

Reply

Marsh Posté le 16-05-2001 à 16:39:24    

shinji > j'avais pensé à une solution de ce genre, mais je ne connais pas assez bien la syntaxe de ce genre de trucs.
 
Et ressurgit alors l'éternel débat entre théorie et efficacité...

Reply

Marsh Posté le 16-05-2001 à 16:49:03    

shinji a écrit a écrit :

BEN>
Ca marche mais c'est pas conventionnel!
C'est contradictoire avec la théorie, je veut dire par là que c'est pas conforme.
Mais bon, c'est juste pour info, je prétends rien!
un select ... from (select...) tu verra jamais ça dans les bouquins et un prof t'égorge direct.
Même si j'ai déjà fait des requètes comme ça, c'est tentant mais je me suis fait rappeler à l'ordre.
Il y a toujours un moyen de faire autrement!




j'ai jamais eu de prof de SQL :D
je coyais que les view etait faites pour eviter les SELECT ... FROM(SELECT...), preuve que donc on peut en faire :D
 
Je ne suis pas une pro du SQL c'est vrai...

Reply

Marsh Posté le 16-05-2001 à 16:50:21    

>BENB : tu n'étais pas très loin
En effet, sous DB2 la requete est :
SELECT COUNT(*) FROM (SELECT DISTINCT x,y FROM table) AS temp
 
Voilà, alors heureux ?  :bounce:

Reply

Marsh Posté le 16-05-2001 à 16:53:24    

ouahhh ca marche
merci!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Reply

Marsh Posté le 16-05-2001 à 17:05:51    

DuffBeer a écrit a écrit :

>BENB : tu n'étais pas très loin
En effet, sous DB2 la requete est :
SELECT COUNT(*) FROM (SELECT DISTINCT x,y FROM table) AS temp
 
Voilà, alors heureux ?  :bounce:




Merci...
Mais il parait que je ne suis pas conventionnelle :sweat:

Reply

Marsh Posté le 16-05-2001 à 17:23:14    

Pleure pas, c'était juste à titre d'info c'est tout!
Je ne suis pas un dieu du sql, tu en connais sûrement plus que moi même si j'ai eu un prof!
Comme dit Fred c'est le dilemne théorie-pratique!

Reply

Marsh Posté le 16-05-2001 à 17:27:58    

shinji a écrit a écrit :

Pleure pas, c'était juste à titre d'info c'est tout!
Je ne suis pas un dieu du sql, tu en connais sûrement plus que moi même si j'ai eu un prof!
Comme dit Fred c'est le dilemne théorie-pratique!




non, non tu ne me trouves pas conventionnelle, ne cherches pas a te racheter...
De toute facon, le SQL je le subit plus que je ne le maitrise...
je tatonne, et si ca marche OK sinon ...

Reply

Marsh Posté le 16-05-2001 à 17:44:27    

A mon avis, tu "maîtrise" plus que moi!
Je suis en 2ème année de DUT alors pour ce que j'en ai de la pratique! Comparer à toi, ça doit pas peser grand chose!
Cependant si ça te fait plaisir de ne pas être conventionnel, alors je le répète tu n'es pas conventionnelle!
Moi en ce moement, je tatonne comme tu dit mais en php!
@+
:)

Reply

Marsh Posté le 16-05-2001 à 17:46:12    

Haut de mon énorme expérience (au bas mot... 3 ans :lol:), je peux affirmer que le SQL nécessite parfois, comme d'autres langages, d'avoir un petit côté vaudou.
 
Dans mon bureau, on a un poulailler (oui, comme dans le loft) pour les cas extrêmes.

Reply

Marsh Posté le 17-05-2001 à 11:35:54    

En SQL, la vitesse de la requête est parfois plus importante que les conventions à appliquer (un peu comme JE avec Loana dans le loft). :o  
Dans ces conditions, je pense que ma réponse est assez satisfaisante. :jap:  :hello:

 

[edit]--Message édité par DuffBeer--[/edit]

Reply

Marsh Posté le 17-05-2001 à 11:51:28    

Question : Que dit Loana après un orgasme ?
Réponse : Au suivant !!!
Humour !!! :D

 

[edit]--Message édité par DuffBeer--[/edit]

Reply

Marsh Posté le 17-05-2001 à 11:55:44    

Question : Comment savoir que Kenza a ouvert le frigo ?
Réponse : Il ya des traces de rouge à lévres sur le concombre !!!
Humour (bis) !!! :D    
(désolé pour le hors sujet :crazy: )

 

[edit]--Message édité par DuffBeer--[/edit]

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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