我有 3 张表,一张表包含世界上每个国家及其代币
NAME CODE
Afghanistan AFG
Albania AL
Algeria DZ
American Samoa AMSA
Andorra AND
Angola ANG
Anguilla AXA
(...)
还有一张包含这些国家/地区所有湖泊和另一张所有山脉的表格。
LAKE CODE
Bodensee A
Neusiedlersee A
Lake Prespa AL
Lake Ohrid AL
Lake Skutari AL
Lake Eyre AUS
Lake Jindabyne AUS
Lake Hume AUS
Lake Eucumbene AUS
Lake Hume AUS
Lake Burley Griffin AUS
(...)
MOUNTAIN CODE
Hochgolling A
Hochgolling A
Zugspitze A
Grossglockner A
Jezerce AL
Korab AL
Uluru AUS
Mt. Kosciuszko AUS
Mt. Bogong AUS
Musala BG
Illampu BOL
Sajama BOL
Licancabur BOL
(...)
我现在必须显示山脉数量少于湖泊数量的国家。我现在尝试了几个小时,但找不到解决这个问题的方法。 我尝试将 3 个表连接在一起 - 但我不知道下一步该怎么做。我确信我必须使用嵌套的 SQL 命令。
这是我尝试计算每个国家的湖泊和山脉
SELECT Country.name, count(Geo_lake.code), count(Geo_mountain.code)
From Country
INNER JOIN Geo_lake On (Country.code = geo_lake.code)
INNER JOIn Geo_mountain On (Country.code = geo_mountain.code)
Group by Country.name;
但不知何故,两列 count(Geo_lake.country) 和 count(Geo_mountain.country) 似乎具有相同的值,我不知道确切原因。
最佳答案
首先分别获取每个项的总和:
# Sum of lakes
SELECT code, count(*) AS sum FROM lakes GROUP BY code
# Sum of mountains
SELECT code, count(*) AS sum FROM mountains GROUP BY code
然后将结果连接在一起,并选择一个国家/地区的山脉总和小于湖泊数量的所有行:
SELECT l.code AS code, l.sum AS lake_count, m.sum AS mountain_count
FROM
(SELECT code, count(*) AS sum FROM lakes GROUP BY code) AS l JOIN
(SELECT code, count(*) AS sum FROM mountains GROUP BY code) AS m
ON l.code = m.code
WHERE m.sum < l.sum
关于mysql - SQL:比较不同表中的两个计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35215541/