为何SQL的ORDER BY未默认按升序排序?SQL Server环境疑问
解决SQL Server中ORDER BY排序异常的问题
先确认count列的数据类型
字符串类型的数值排序逻辑和数值类型完全不同,比如字符串"2"的ASCII码虽比"3"小,但如果列中存在"10"这类值,它会排在"2"前面。你可以用下面的语句检查count列的类型:SELECT 你的分组列, COUNT(*) AS cnt, SQL_VARIANT_PROPERTY(COUNT(*), 'BaseType') AS cnt_type FROM 你的表名 GROUP BY 你的分组列;如果返回的
cnt_type是varchar或char这类字符型,那就是类型导致的排序异常。转换类型后再排序
如果是字符型的count列,强制转换成数值型再排序:SELECT 你的分组列, COUNT(*) AS cnt FROM 你的表名 GROUP BY 你的分组列 ORDER BY CAST(cnt AS INT) ASC;或者直接基于COUNT(*)的结果排序,跳过别名:
SELECT 你的分组列, COUNT(*) AS cnt FROM 你的表名 GROUP BY 你的分组列 ORDER BY COUNT(*) ASC;检查ORDER BY的目标列是否正确
确认你没有排错列,比如不小心把排序字段写成了分组列或者其他列,下面的错误写法会导致排序不符合预期:SELECT 你的分组列, COUNT(*) AS cnt FROM 你的表名 GROUP BY 你的分组列 ORDER BY 你的分组列 ASC; -- 这里排的是分组列,不是count列排除SSMS界面排序干扰
SSMS查询结果的列头点击后会触发界面排序,覆盖SQL语句的ORDER BY效果。重新执行查询后,不要点击任何列头,查看原始返回结果是否符合预期。
内容的提问来源于stack exchange,提问作者Xyls047
相关产品推荐
相关产品推荐

