7
votes

MySQL Comment obtenir le nombre correct de tous les champs souhaités dans le tableau

Disons que j'ai une table:

Id, City1, City2, City3, Pays, .... (pas important) p>

La demande demande aux gens où aimeraient vivre Dire la France. Il est donc obligatoire d'ajouter au moins une ville, mais vous pouvez ajouter 3 villes maximales. P>

Donc, par exemple, nous avons dans les données du tableau: P>

    select City1 as city, count(1) as num 
    from table_c 
   where Country = "France" group by City1;


5 commentaires

Faire un syndicat tout. (Ou utiliser des expressions de cas.)


Comment cela peut-il être fait, je ne suis pas très expérimenté avec SQL, est-il possible que vous puissiez m'écrire un exemple s'il vous plaît? Merci


Sélectionnez Ville, Compte (*) de (Sélectionnez Pays, City1 en tant que ville de My_Table Union Tout Select Pays, City2 de My_Table Union Tout Sélectionnez Pays, City3 de My_Table) X Groupe par Ville . Notez que les colonnes énumérées (ci-dessus 2, disent) sont souvent symptomatiques de la conception médiocre


Je vais essayer maintenant et revenir à vous tous :)


Merci à tous, ça a résolu mon problème. J'ai tout vérifié et travaille parfaitement pour ce dont j'ai besoin. Merci encore :)


4 Réponses :


3
votes

dans le cas de City1 code> Colonne contient toutes les villes, vous pouvez simplement faire cela:

SELECT t.city,count(*) FROM (
    SELECT City1 as city FROM table_c WHERE Country = "France"
    UNION ALL
    SELECT City2 FROM table_c WHERE Country = "France"
    UNION ALL
    SELECT City3 FROM table_c WHERE Country = "France"
    UNION ALL
    SELECT City4 FROM table_c WHERE Country = "France") t
GROUP BY t.city


0 commentaires

2
votes

Vous pouvez essayer la requête suivante:

SELECT      city,
            SUM(cnt) AS num
    FROM    (
        SELECT      City1 AS city,
                    COUNT(*) AS cnt
            FROM    table_c
            WHERE   Country = 'France'
        GROUP BY    City1
        UNION ALL
        SELECT      City2 AS city,
                    COUNT(*) AS cnt
            FROM    table_c
            WHERE   Country = 'France'
        GROUP BY    City2
        UNION ALL
        SELECT      City3 AS city,
                    COUNT(*) AS cnt
            FROM    table_c
            WHERE   Country = 'France'
        GROUP BY    City3
        ) tmp
GROUP BY    tmp.city;


0 commentaires

2
votes

Essayez ceci;)

select city, count(1)
from (
    select City1 as city
    from table_c 
    where Country = "France"
    union all 
    select City2 as city
    from table_c 
    where Country = "France"
    union all 
    select City3 as city
    from table_c 
    where Country = "France") tmp
group by city


0 commentaires

2
votes

Pouvez-vous essayer ce SQL et laissez-moi savoir si cela fonctionne xxx


2 commentaires

C'est une copie de plus d'une réponse ici.


Je viens de voir qu'il y avait plus de réponses que la mienne