使用sql语句计算百分比怎么写?

上周我的朋友询问了数据库百分比。

1 .求每一行的百分比: 选择 round((sa/toteltim)1 00,2 ) 作为“sa 的百分比”。
round((sb/toteltim)1 00,2 ) 作为“sb的百分比”; round((sc/toteltim)1 00,2 ) as "sc 百分比"; round((sd/toteltim)1 00,2 ) 作为“sd 百分比”; round((se/toteltim)1 00,2 ) 作为“se 百分比”。
从表名 这很容易理解。

2 求总数后的百分比: 选择 round(sum(sa)/sum(toteltim)1 00,2 ) 作为“sa 总百分比”。
round(sum(sb)/sum(toteltim)1 00,2 ) as "sb 总百分比"; round(sum(sc)/sum(toteltim)1 00,2 ) 作为“sc 总百分比”; round(sum(sd)/sum(toteltim)1 00,2 ) 作为“sd 总数的百分比”; round(sum(se)/sum(toteltim)1 00,2 ) 作为“se 总百分比”。
从表名 将所有数据相加计算得出。

3 百分比显示: 使用舍入函数乘以 1 00 保留两位小数。

你的例子有问题。
应该是: sql 选择 mz 为“国家”; '人数' as count(); round((count()/8 0.001 00),2 ) '比率' 来自 ryxx 对于 mz
8 0,组后面必须跟一个单位。
我不确定这是否是你想要的。

算了。
这取决于你。

sql如何计算百分比

说实话,当我第一次遇到 SQL 中的百分比计算时,我感到非常困惑。
当理解各种边界条件时尤其如此。
我以你提到的三种方法为例,告诉你我陷入困境时的理解和经历。

直接计算是最简单、最直接的方法,但也最考验你对SQL细节的理解。
我记得有一次我自己在给老板写月度报告时使用了Sales/Revenue1 00,结果是爆炸性的。
这是因为 Revenue 有几个零值,直接除以它们都会得到无穷大。
后来我改用Sales/NULLIF(Revenue,0)1 00来完成这件事,但说实话,如果你用太多这个NULLIF,很容易让人眼花缭乱。
我当时还想知道使用 COALESCE(Revenue, 1 ) 而不是 NULLIF 是否会更直观。
后来证明这是不可能的。
因为1 会直接参与计算,结果就会错误。
所以这个方法的关键是“分母不能为0”,剩下的就是细节了。

窗口函数的有趣之处在于它们抽象了计算范围。
我曾经在一家电子商务公司做分析。
我们用它来计算每个类别的销售额占总销售额的百分比,并编写了SUM(Sales)OVER()。
结果,9 0%的CPU都被使用了。
当时很困惑,后来发现是表太大了,整个SUM都在扫描整个表。
后来使用 PARTITION BY Category 将其折叠。
关于此方法最重要的是理解 OVER 子句的范围。
起初我对 GROUP BY 感到困惑,因为计算出的百分比都是一样的。

CASE 表达式是我用得最少的方法,但它们也有其用武之地。
过去,我曾参与过一个金融行业的项目,该项目根据客户的信用评级提供各种折扣优惠。
您可以使用 CASE 自行完成,CASE WHEN CreditGrade='A' THEN 5 .0 ELSE 3 .0 END。
当时差点忘了加ELSE。
后来测试的时候,震惊的发现有一些未分类的客户自己算出了-1 00%的折扣。
所以这个方法对于“条件分支特别清晰”的场景很有用,但是如果分支太多——超过3 层CASE嵌套——那就会变得很难看。

最后分析一下,这三种方式各有各的优点。
直接计算适合简单场景,窗口函数适合分组统计,CASE表达式适合条件逻辑。
我们建议您根据自己的业务需求进行选择,不要盲目使用。
例如,有一个场景,您想要计算特定产品线占公司总收入的百分比。
Windows函数肯定比CASE更合适。
但是,如果计算“如果客户购买产品A,您将获得5 %的返利”,CASE比窗口函数可靠得多。

哦,顺便说一句,我想补充一下我对你提到的性能问题的经验。
尽管窗口功能很强大,但请避免直接在非常大的数据表上使用 SUM(Sales) OVER()。
最好将其分解成小表,然后进行总结。
当时,我有一个包含 2 000 万个项目的项目表,并且在使用结果时卡住了两个小时。
最后使用临时表+窗口函数我解决这个问题的方法是:我个人没有在这方面运行最新版本的SQL Server,但我记得被阻止之前的数据大约是1 0亿。
你必须自己测试一下。

SQL 数值函数如何实现百分比计算?