0
votes

Combinez deux requêtes SQL qui sont différentes de taille différente parce que

J'ai deux requêtes SQL.

Dans l'une, je cherche combien de villes se trouvent dans chaque pays et filtrez tous ceux avec moins de 6 villes.

Dans la seconde, je recherche la quantité de population dans la capitale et filtre tous les ceux qui ont moins de 500 000 habitants.

Le résultat que je cherche cherche tous les pays avec plus de 6 villes de la base de données et moins de 500 000 habitants, car ce sont des tailles différentes que je ne peux pas sembler pour les unir xxx

Je voulais le faire à la fois dans le même comme xxx

mais qui montre le compteur pour villes comme une seule. la capitale.

merci


9 commentaires

Pourriez-vous montrer le schéma des tables de pays et des tables de ville et des exemples de données?


Je suis un peu confus sur quel est votre objectif. Si vous filtrez par nombre d'habitants dans la capitale Comment la requête afficherait-elle une autre ville (à moins que ce soit bien sûr de nouvelles capitales) pourriez-vous s'il vous plaît clarifier?


@Jorge Le résultat final que je cherche est le pays, la quantité de villes dans ce pays, capitale de ce pays, population de capitaux mais seulement si les villes sont supérieures à 5 et que la population est inférieure à 500 000


@kristech je ne suis pas sûr de ce que vous me demandez, mais je vais essayer de vous montrer ce que je reçois dans la première requête le résultat que je reçois est Nom états_in_country Italie 54 Ethiopie 10 Dans la deuxième réputation Population de capital Monaco Monaco 1234 Saint-Siège Vatican City 392


De plus, votre base de données est-elle mysql ou oracle? Vous avez marqué les deux


@Jorge Oracle SQL Developer, j'ai utilisé l'étiquette Recommandations Stackoverflow


Salut @Tuliodnw a fait l'une des réponses fournies pour vous aider? Si tel est le cas, veuillez envisager de le faire (celui qui a fonctionné mieux pour vous) comme accepté. Vous le faites en cliquant sur l'icône V à gauche de la réponse choisie.


@Jorge, pas encore. Voici la carte de la base de données. imgur.com/a/biu2uno J'ai essayé de chercher à se joindre à l'intérieur mais n'a pas eu de chance.


Salut là-bas, alors je suis bonne chose à faire, il est donc de fournir une exemple de données de votre base de données (juste quelques lignes des deux tables) et de cet exemple quel serait le résultat dont vous avez besoin. Cela vous aidera à clarifier beaucoup votre question et nous pourrons vous répondre plus précisément. Jetez un oeil à ce fil sur la manière de configurer un exemple de données: meta.stackoverflow.com/a/271056/460557


4 Réponses :


0
votes

semble que vous ne recherchez pas dans la requête que vous avez essayé xxx


0 commentaires

0
votes

Un joint doit faire le travail: xxx


1 commentaires

Vous êtes une adhésion externe, car vous êtes également intéressé par les pays qui n'ont pas de villes? Mais de ces zéro villes, plus de cinq ans doivent avoir plus de 50000 habitants? Ne vous joignez pas externe lorsque vous n'êtes pas obligé. Et lorsque vous devez, veillez à mettre des critères de jointure dans la clause sur , pas dans . (Votre où la clause rend votre externe Rejoignez une simple jointure intérieure, car les enregistrements joints extérieurs ont une population null.)



0
votes

Voici une requête qui peut fonctionner. Faites attention au fait que vous mentionnez la population est inférieure à forte> et que vous utilisez sur votre requête > 500000 code> qui est plus grand que. Alors assurez-vous que ce dont vous avez besoin est en fait moins.

select c.name, 
       cyCapital.name as capital,
       cyCapital.population as capPop,
       count(cy.*) cities
  from country c
         inner join city cy
           on c.code = cy.country
            and cy.population < 500000
         left join city cyCapital
           on c.code = cyCapital.country
           and c.capital = cyCapital.name
group by c.name,
         cyCapital.name as capital,
         cyCapital.population as capPop
having count(cy.*) > 5


0 commentaires

0
votes

pays avec plus de six villes et moins de 500 000 habitants:

select c.code
from country c on ci.country = c.code
join city ci
group by c.code
having count(*) > 6 
  and count(case when c.capital = ci.name and ci.population < 500000 then 1 end) = 1;


0 commentaires