You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求编写统计满足条件的国家语言数量的SQL查询语句

修复你的SQL查询:统计符合条件的国家语言数量

嘿,我看看你的SQL问题哈~你原来的写法问题在于在同一个SELECT语句里重复使用了WHERE和GROUP BY,这不符合SQL语法规则,数据库没法解析这种结构。咱们换个更合理的思路来实现你的需求:统计拥有1种以上官方语言,或者拥有2种以上非官方语言的国家,并展示对应的语言数量。

方法1:使用条件聚合(推荐)

这种方法在一次分组中直接计算每个国家的官方/非官方语言数量,然后通过HAVING筛选符合条件的记录:

SELECT 
    CountryCode,
    -- 统计官方语言数量
    SUM(CASE WHEN IsOfficial = 'T' THEN 1 ELSE 0 END) AS OfficialLangCount,
    -- 统计非官方语言数量
    SUM(CASE WHEN IsOfficial = 'F' THEN 1 ELSE 0 END) AS UnofficialLangCount
FROM countrylanguage
GROUP BY CountryCode
-- 筛选满足任一条件的国家
HAVING SUM(CASE WHEN IsOfficial = 'T' THEN 1 ELSE 0 END) > 1 
   OR SUM(CASE WHEN IsOfficial = 'F' THEN 1 ELSE 0 END) > 2
ORDER BY CountryCode;

代码解释:

  • SUM(CASE ...):通过条件判断分别累加官方/非官方语言的数量,比多次分组更高效。
  • GROUP BY CountryCode:按国家代码分组,确保我们统计的是每个国家的整体语言情况。
  • HAVING子句:在分组后筛选出满足「官方语言>1」或「非官方语言>2」的国家。

方法2:使用CTE(公共表表达式)提升可读性

如果觉得条件聚合的写法有点绕,可以用CTE先统计每个国家的语言数据,再筛选:

WITH CountryLangStats AS (
    SELECT 
        CountryCode,
        COUNT(CASE WHEN IsOfficial = 'T' THEN Language END) AS OfficialLangCount,
        COUNT(CASE WHEN IsOfficial = 'F' THEN Language END) AS UnofficialLangCount
    FROM countrylanguage
    GROUP BY CountryCode
)
SELECT CountryCode, OfficialLangCount, UnofficialLangCount
FROM CountryLangStats
WHERE OfficialLangCount > 1 OR UnofficialLangCount > 2
ORDER BY CountryCode;

代码解释:

  • CountryLangStats:先定义一个临时结果集,存储每个国家的官方/非官方语言数量。
  • 后续的SELECT直接从这个临时结果集中筛选符合条件的记录,逻辑更清晰。

这两种写法都能实现你的需求,而且语法完全合规,你可以根据自己的习惯选择~

内容的提问来源于stack exchange,提问作者user9596757

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:42:00