SQL报错:nvarchar数据类型不适用于SUM运算符,求解决方案
解决SUM(genre)的类型错误问题
嘿,我一眼就看出问题所在了——genre字段是字符串类型(比如存的是"Action"、"Drama"这类分类名称),你居然试图对字符串做SUM()求和,哪怕用CAST转成INT也白搭,因为这些字符串根本不是数字格式,数据库肯定会给你抛错误。
再看你注释掉的百分比计算,你真正想要的应该是统计每个分类的条目数占总条目数的百分比对吧?那原来的SUM(genre)完全是用错了方向,我们需要的是用窗口函数来计算所有分组的总条目数,而不是去对genre这个字符串字段本身求和。
给你修正后的可运行SQL代码:
USE IMDB; SELECT CAST(genre AS CHAR(20)) AS "Genre", COUNT(genre) AS "Count", -- 用窗口函数计算所有分类的总条目数,这才是你要的Total SUM(COUNT(genre)) OVER () AS "Total", STR(100 * COUNT(genre) / SUM(COUNT(genre)) OVER (), 6, 2) + '%' AS "Percent" FROM title_genre GROUP BY genre ORDER BY "Count" DESC;
关键改动解释:
- 替换了错误的
SUM(genre):换成SUM(COUNT(genre)) OVER (),这个窗口函数会遍历所有分组,把每个分组的Count加起来,得到总条目数,这才是你需要的"Total"值。 - 启用了你注释里的百分比逻辑:现在可以正常算出每个分类的占比,格式是带两位小数的百分比字符串。
补充一句:你之前尝试用CAST(genre AS INT)肯定不行,因为genre存的是分类名称,比如"Comedy",数据库没办法把这类字符串转换成整数,自然会触发操作错误。记住求和操作只适用于数值类型字段,分类名称这种字符串根本不适合做求和运算。
内容的提问来源于stack exchange,提问作者user11036217
相关产品推荐
相关产品推荐

