mysql - SQL:比较不同表中的两个计数

标签 mysql sql

我有 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/

相关文章:

mysql - SQL:我需要选择连续日期中 3 行相同的位置

sql - SQL Server 中的 DATALENGTH VARCHAR

sql - 在sql server中选择单行作为多行

PHP SQL 搜索结果作为 POST/GET 链接

c# - Linq 类似或其他结构

mysql - 从两个表中选择?

php - 批量通过电子邮件发送 mysql 表设置?

MySql - 计算多行的时间差

php - 使用 codeigniter 将 IPv6 插入数据库

mysql - 如果未找到行,则返回默认值