Contraire de "SELECT DISTINCT" en SQL
8 messages
• Page 1 sur 1
- FINIELS
- WRInaute discret

- Messages: 96
- Inscription: 24 Mai 2004
Contraire de "SELECT DISTINCT" en SQL
Salut tout le monde,
j'aurais besoin d'un peu d'aide parce que là je pédale dans la semoule...
Je souhaiterais sélectionner toutes les lignes d'une table ou la commune et le nombre d'habitants sont identiques...
Cette fonction fonctionne :
SELECT *, count(*) FROM `villes` GROUP BY Commune,NombreHabitants HAVING count(*) > 1
Mais elle ne me sort qu'un seul enregistrement de la ligne en double. Et moi j'aurais besoin de tous les enregistrements dupliqués.
Si quelqu'un a une idée...Je suis preneur...
j'aurais besoin d'un peu d'aide parce que là je pédale dans la semoule...
Je souhaiterais sélectionner toutes les lignes d'une table ou la commune et le nombre d'habitants sont identiques...
Cette fonction fonctionne :
SELECT *, count(*) FROM `villes` GROUP BY Commune,NombreHabitants HAVING count(*) > 1
Mais elle ne me sort qu'un seul enregistrement de la ligne en double. Et moi j'aurais besoin de tous les enregistrements dupliqués.
Si quelqu'un a une idée...Je suis preneur...
-

magicaxe - WRInaute discret

- Messages: 151
- Inscription: 18 Oct 2004
Essaie cela, je ne suis pas sûr de la requête car je n'ai pas le shéma de ta table:
- Code: Tout sélectionner
SELECT NomVille, SUM(habitants) nombre FROM villes WHERE nombre = Commune GROUP BY NomVille
- FINIELS
- WRInaute discret

- Messages: 96
- Inscription: 24 Mai 2004
Ma table :
id || Commune || Codepos || NombreHabitants
1 || NIMES|| 30000 || 130000
2 || NIMES|| 30900|| 130000
3 || VIENNE|| 26000|| 12000
4 || MARSEILLE 1er arrdt || 13001|| 23000
5 || MARSEILLE 2er arrdt || 13002|| 25000
6 || MARSEILLE 3er arrdt || 13003|| 45000
7 || TOULOUSE || 81000|| 55000
8 || TOULOUSE || 81150|| 55000
Et je souhaite récupérer ça :
1 || NIMES|| 30000 || 130000
2 || NIMES|| 30900|| 130000
7 || TOULOUSE || 81000|| 55000
8 || TOULOUSE || 81150|| 55000
Grosso modo pour certaines villes, la ville est en double (seul le code postal différe) et je souhaiterais passer la population d'un des codes postaux à "0" pour ne pas fausser mes calculs de population.
je vais tester ta solution magicaxe
id || Commune || Codepos || NombreHabitants
1 || NIMES|| 30000 || 130000
2 || NIMES|| 30900|| 130000
3 || VIENNE|| 26000|| 12000
4 || MARSEILLE 1er arrdt || 13001|| 23000
5 || MARSEILLE 2er arrdt || 13002|| 25000
6 || MARSEILLE 3er arrdt || 13003|| 45000
7 || TOULOUSE || 81000|| 55000
8 || TOULOUSE || 81150|| 55000
Et je souhaite récupérer ça :
1 || NIMES|| 30000 || 130000
2 || NIMES|| 30900|| 130000
7 || TOULOUSE || 81000|| 55000
8 || TOULOUSE || 81150|| 55000
Grosso modo pour certaines villes, la ville est en double (seul le code postal différe) et je souhaiterais passer la population d'un des codes postaux à "0" pour ne pas fausser mes calculs de population.
je vais tester ta solution magicaxe
- jcaron
- WRInaute accro

- Messages: 2678
- Inscription: 13 Fév 2004
Re: Contraire de "SELECT DISTINCT" en SQL
FINIELS a écrit:Je souhaiterais sélectionner toutes les lignes d'une table ou la commune et le nombre d'habitants sont identiques...
Cette fonction fonctionne :
SELECT *, count(*) FROM `villes` GROUP BY Commune,NombreHabitants HAVING count(*) > 1
Mais elle ne me sort qu'un seul enregistrement de la ligne en double. Et moi j'aurais besoin de tous les enregistrements dupliqués.
Ben une fois que tu as la liste des doublons, il suffit de les afficher:
- Code: Tout sélectionner
SELECT * from villes WHERE (Commune,NombreHabitants) IN (SELECT Commune,NombreHabitants FROM villes GROUP BY 1,2 HAVING count(*)>1)
Jacques.
-

magicaxe - WRInaute discret

- Messages: 151
- Inscription: 18 Oct 2004
Une autre voie:
Ca doit te donner le résultat recherché.
Je me base sur une jointure entre la table villes et elle-même si le nom de la commune est identique, si le nombre d'habitants est égal et si le code postale est différent. Toutes les communes n'ayant pas d'équivalent au niveau du nom ou du nombre d'habitants ne ressortiront pas.
Attention, cette reqête ne fera pas ressortir le résultat suivants:
1 || NIMES|| 30000 || 130000
2 || NIMES|| 30900|| 130000
7 || TOULOUSE || 81000|| 55000
8 || TOULOUSE || 81150|| 55000
n || TOULOUSE || 81xxx|| 12000
Une commune Toulouse avec un nombre d'habitant différent de 55'000
A+
- Code: Tout sélectionner
SELECT v1.Commune, v1.CodePos, v1.NombreHabitant FROM villes v1 JOIN villes v2 ON v1.Commune = v2.Commune AND v1.CodePos != v2.CodePos AND v1.NombreHabitants = v2.NombreHabitant
Ca doit te donner le résultat recherché.
Je me base sur une jointure entre la table villes et elle-même si le nom de la commune est identique, si le nombre d'habitants est égal et si le code postale est différent. Toutes les communes n'ayant pas d'équivalent au niveau du nom ou du nombre d'habitants ne ressortiront pas.
Attention, cette reqête ne fera pas ressortir le résultat suivants:
1 || NIMES|| 30000 || 130000
2 || NIMES|| 30900|| 130000
7 || TOULOUSE || 81000|| 55000
8 || TOULOUSE || 81150|| 55000
n || TOULOUSE || 81xxx|| 12000
Une commune Toulouse avec un nombre d'habitant différent de 55'000
A+
- FINIELS
- WRInaute discret

- Messages: 96
- Inscription: 24 Mai 2004
Merci à tous pour votre aide mais je me suis débrouillé !
Ok ok c'est pas super optimisé et je me suis fais chier mais je suis arrivé au résultat voulu :
Ok ok c'est pas super optimisé et je me suis fais chier mais je suis arrivé au résultat voulu :
- Code: Tout sélectionner
$request = mysql_query("SELECT *, count(*) FROM `villes` GROUP BY Communeurl,NombreHabitants HAVING count(*) > 1");
while ($line = mysql_fetch_array($request)) {
$commune = $line['Communeurl'];
$cp = $line['Codepos'];
$id = $line['id'];
$hab = $line['NombreHabitants'];
$Communeurl = $line['Communeurl'];
echo 'Ville 1 : '.$commune.' '.$cp.' '.$hab.' ID : '.$id.' <input type="checkbox" name="test'.$id1.'" id='.$id1.' /><br />';
$request2 = mysql_query("SELECT * FROM `villes` WHERE Communeurl= '$commune' AND NombreHabitants = '$hab' AND Codepos NOT LIKE '$cp' ");
$line2 = mysql_fetch_array($request2);
$Commune2 = $line2['Communeurl'];
$cp2 = $line2['Codepos'];
$id2 = $line2['id'];
$hab2 = $line2['NombreHabitants'];
echo 'Ville 2 : '.$Commune2.' '.$cp2.' '.$hab2.' ID : '.$id2.'<input type="checkbox" name="test'.$id2.'" id='.$id2.' /><br />';
echo '<br />';
}
8 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Probleme select SQL
- Optimisation SQL - Inner Join (3) ou 3 x Select ?
- Requete sql INSERT INTO + SELECT (php)
- sql : requête select MAX(champ) from table
- [SQL]Requete select à l'intérieur d'un Delete
- [PHP/SQL] Associer plusieurs SELECT de tables MySQL
- Pb d'organisation d'une UNION de deux requetes SELECT en sql
- SQL : faire un select indifférent aux caractère spéciaux
- [SQL] Select, Distinct, Max, Group by et autres fariboles
- affichage requete sql dans un champ select en temps reel (ou presque...)
Consultez la description détaillée des produits ou services de Google suivants : Google TrustRank
- Calcul du taux de liens vers des pages internes
Cet outil vous permet de calculer le taux de liens profonds vers un site web. Un lien profond est un lien qui ne pointe pas vers la page d'accueil mais au contraire vers une page interne du site. Les sites dont l'essentiel du référencement vient de leurs inscriptions dans des annuaires ont un taux de liens profonds faible ; à l'inverse, les sites de référence ont souvent un taux de liens profonds plus important, signe que leur contenu a suscité de nombreux liens spontanés.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

