如何编写SQL计算maps_query表中各国家搜索查询的相对占比
你的写法存在多处问题,无法实现需求,具体问题和修正方案如下:
存在的问题
- 表名引用错误:题目给出的表名为
maps_query,原SQL中写的map_search不存在,执行会直接报错。 - 统计逻辑错误:
search_query是字符串类型,不能用sum()函数求和,统计单国家的搜索查询总数量应该用count(*)统计符合条件的行数。 - 输出格式不匹配:原SQL乘了100会输出百分比数值(如13),但预期输出是0.13这类小数占比,不需要乘100。
- 精度丢失风险:大部分数据库中两个整数做除法会默认返回整数(例如1/10会得到0而非0.1),需要先将分子转为浮点型保证计算精度。
修正后的SQL
SELECT country, ROUND(COUNT(*) * 1.0 / COUNT(*) OVER (), 2) AS pct FROM maps_query GROUP BY country
说明:添加ROUND()函数是为了贴合示例输出的两位小数格式,如果不需要固定小数位数可以去掉该函数。
内容的提问来源于stack exchange,提问作者LLL
相关产品推荐
相关产品推荐

