Mysql 如何使用sql语句生成结果?

Mysql 如何使用sql语句生成结果?,mysql,sql,database,Mysql,Sql,Database,原始表格: 请参见结果中的国家/地区列。 总之,我想列出每个国家人口最多的省份,然后列出每个国家人口第二大的省份 有人能帮我吗 通过对总体使用递减排序和limit子句,很容易获得威瑟尔列表。要获取这两个列表,可以对这两个列表使用并集: SELECT * FROM ( SELECT '1' as `rank_group`, `province`, `population`,

原始表格:

请参见结果中的国家/地区列。 总之,我想列出每个国家人口最多的省份,然后列出每个国家人口第二大的省份


有人能帮我吗

通过对总体使用递减排序和limit子句,很容易获得威瑟尔列表。要获取这两个列表,可以对这两个列表使用并集:

SELECT *
FROM 
    (
        SELECT 
            '1' as `rank_group`,
            `province`,
            `population`,
            `country`
        FROM `table` a
        GROUP BY `province`,`country`
        ORDER BY `population` DESC
        LIMIT 0,1
    )
UNION
SELECT *
FROM 
    (
        SELECT 
            '2' as `rank_group`,
            `province`,
            `population`,
            `country`
        FROM `table` a
        GROUP BY `province`,`country`
        ORDER BY `population` DESC
        LIMIT 1,1
    )
ORDER BY `rank_group`,`population` DESC;

您的预期输出有两个差异

  • c2p1800
    放在
    c3p2900
    之前,我认为这是不正确的

  • 结果,第7行是
    c2p1
    ,但它应该是
    c3p1
    ,我认为这是一个打字错误

  • 此外,我还将生成序列号的逻辑留给了您,您可以轻松地在谷歌上搜索

    select t1.country,t1.province,t1.population
    from tbl1 t1
    inner join tbl1 t2
    on t1.country=t2.country
    where t1.population <= t2.population 
    group by t1.country,t1.province
    order by count(*),t1.population desc;
    

    说明:使用
    where
    condition
    where t1进行自连接。请尝试以文本格式而不是图像格式提供数据,因为我们无法为图像复制文本来复制相同的数据。谢谢!这是真的。只有“完整”组“由”是disabled@WubinOuyang如果答案对你有用,请随意接受,这样问题就可以结束了。
    
    +---------+----------+------------+
    | country | province | population |
    +---------+----------+------------+
    | C1      | C1P3     |       1500 |
    | C3      | C3P2     |        900 |
    | C2      | C2P1     |        800 |
    | C4      | C4P1     |        100 |
    | C1      | C1P1     |       1000 |
    | C2      | C2P2     |        500 |
    | C3      | C3P1     |        100 |
    | C1      | C1P2     |        500 |
    +---------+----------+------------+