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

如何优化计算各区域国家平均语言数量的SQL查询语句?

各区域国家平均语言数量SQL优化方案

原写法存在的问题

  • 额外创建2张中间临时表,产生不必要的磁盘IO开销,数据量较大时性能损耗明显
  • 多表关联逻辑冗余,多次扫描相同的regions、countries表,执行效率低
  • 缺少边界处理,若区域内无国家时除法运算会触发除零报错

优化后实现方案

仅需一次查询即可完成计算,无需创建中间表,逻辑更简洁执行效率更高:

SELECT 
    r.name AS region_name,
    COUNT(DISTINCT c.country_id) AS total_countries,
    COUNT(cl.country_id) AS total_langs,
    ROUND(
        CASE WHEN COUNT(DISTINCT c.country_id) = 0 THEN 0 
             ELSE COUNT(cl.country_id)::DECIMAL / COUNT(DISTINCT c.country_id) 
        END, 
    1) AS avg_lang_count_per_country
FROM regions r
LEFT JOIN countries c ON r.region_id = c.region_id
LEFT JOIN country_languages cl ON c.country_id = cl.country_id
GROUP BY r.name
ORDER BY avg_lang_count_per_country DESC;

逻辑说明

  • 用LEFT JOIN保留所有区域数据,即使该区域没有国家也会出现在结果中
  • COUNT(DISTINCT c.country_id)统计每个区域下的国家总数,避免多语言条目导致国家数重复统计
  • 加入CASE判断处理区域无国家的场景,避免除零报错
  • 一次分组聚合完成所有指标计算,仅需扫描三张表各一次,性能远高于原写法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:36:05