sql子查询多列

myzjeezk  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(137)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

11个月前关门了。
改进这个问题
我有一个数据集,其中包含2019年12月至2020年4月期间世界各国记录的冠状病毒病例列表。我正在尝试编写一个sql查询,以给出这段时间内排名前十位的国家的累计总数(即最后总数最高的国家)。
我首先编写了一个查询,给出所有国家的累计总数,然后尝试编写一个子查询,将此列表限制为只包含前十个国家的数据。

SELECT 
    Virus.dateRep,
    Country.countriesAndTerritories,
    SUM(Virus.cases) OVER (PARTITION BY Country.geoId ORDER BY Dates.year, Dates.month, Dates.day ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS 'cume_cases',
    SUM(Virus.deaths) OVER (PARTITION BY Country.geoId ORDER BY Dates.year, Dates.month, Dates.day ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS 'cume_deaths'
FROM    
    Virus
    INNER JOIN 
        Dates ON (Virus.dateRep =  Dates.dateRep)
    INNER JOIN
        Country ON (Virus.geoId = Country.geoId)
WHERE Virus.geoId IN (SELECT 
                        Virus.geoId, sum(Virus.cases) as 'total'
                    FROM    
                        Virus
                    GROUP BY    
                        Virus.geoId
                    ORDER BY
                        total
                        DESC
                    LIMIT 10)
GROUP BY    
    Country.geoId,
    Virus.dateRep
ORDER BY
    Dates.year,
    Dates.month,
    Dates.day,
    Country.countriesAndTerritories
    ASC;

但是,子查询只允许查询一列,因此不起作用。有什么解决办法吗?

xmakbtuz

xmakbtuz1#

只能使用一列执行此操作:

WHERE Virus.geoId IN (SELECT v.geoId
                      FROM  Virus v
                      GROUP BY v.geoId
                      ORDER BY sum(Virus.cases) DESC
                      LIMIT 10
                     )

相关问题