SQL如何做除法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL如何做除法相关的知识,希望对你有一定的参考价值。

上图是我用代码1 实现的效果。我想在代码1的基础上实现下图,即先统计每个orgin-destination每个MOT的SH个数 占 该orgin-destination所有SH个数 的百分比, 然后筛选出该百分比小于等于0.01的。
代码1:
SELECT ORIGIN+' - '+DESTINATION as [origin-destination],MODEOFTRANSPORT,COUNT(SHIPMENTID) AS [SH/LANE/MOT]
FROM ['TMS$']
where PRIORITY = 'Standard'
group by ORIGIN,DESTINATION,MODEOFTRANSPORT
为了实现最终效果我写的代码:
select
t.[origin-destination],t.[SH/LANE/MOT] /count(*) AS PERCENTAGE
FROM (代码1) t

group by [origin-destination]
having t.[SH/LANE/MOT] /count(*) <= 0.01

这个代码不能运行,或者哪位高手有更简略的写法么

这样:

select

t.[origin-destination],t.[SH/LANE/MOT] /(select count(1) from ['TMS$'] ) AS PERCENTAGE
FROM (代码1) t

group by [origin-destination],t.[SH/LANE/MOT]

having t.[SH/LANE/MOT] /count(*) <= 0.01

注:两个count都是int,相除会没有小数部分,所以应该都给转成带小数的数。

cast as numeric(10,4) 。

扩展资料:

SQL中除法运算的实现

R(X,Y)÷S(Y,Z)的运算用结构化语言SQL 语句可表达为下列形式:

select distinct R.X from R R1

where not exists

select S.Y from S

where not exists

select * from R R2

where R2.X=R1.X and R2.Y=S.Y 

)

参考技术A

SQL做除法的步骤:

select

t.[origin-destination],t.[SH/LANE/MOT] /(select count(1) from ['TMS$']) AS PERCENTAGEFROM (代码1) t

group by [origin-destination],t.[SH/LANE/MOT]

having t.[SH/LANE/MOT] /count(*) <= 0.01

注:两个count都是int,相除会没有小数部分,所以应该都给转成带小数的数。

cast as numeric(10,4) 。

扩展资料


例题,表明为chuqinqk   列名 迟到 1(次)一个月的总天数为30   求迟到率。

select * from table1 where 工资>2500 and 工资<3000 //同上

select 姓名 from table1 where 性别='0' and 工资='4000'

select * from table1 where not 工资= 3200

select * from table1 order by 工资desc //将工资按照降序排列

select * from table1 order by 工资 asc //将工资按照升序排列

select * from table1 where year(出身日期)=1987 //查询table1 中所有出身在1987的人select * from table1 where name like 

'%张' /'%张%' /'张%' //查询1,首位字‘张’3,尾位字‘张’2,模糊查询

select * from table1 order by money desc //查询表1按照工资的降序排列表1 (升序为asc)

select * from table1 where brithday is null //查询表1 中出身日期为空的人

SQL语言,是结构化查询语言(Structured Query Language)的简称。

参考技术B

使用分析函数sum() over (partiion by ... )将Origin, Destination相同的SH值计算出来,这样就可以求出百分比值了:

假设代码1整理的结果中Origin, Destination, MOT三个字段不重复,那么可以这样来查询:

select s.*
from (
select t.*, t.[SH/LANE/MOT] * 1.0 / ( sum(t.[SH/LANE/MOT]) over (partiton by t.[origin-destination]) ) AS PERCENTAGE
FROM (代码1) t
) s
where s.PERCENTAGE <= 0.01

 现在一般最近版本的数据库都有支持分析函数的。如果不支持分析函数,那么就要自己再做一个子查询来统计同origin, destination的sh和,然后计算百分比。

追问

我觉得第一行的select s 没有什么用所以把关于S的语句去掉了,但是报错说:

Incorrect syntax near 'partiton'.

Incorrect syntax near 't'.

再把关于S 的语句加回去也还是一样报错,请问是哪里错了呢?

另外问一句,您复制代码怎么复制的是带格式和背景的?

本回答被提问者和网友采纳
参考技术C select
t.[origin-destination],t.[SH/LANE/MOT] /(select count(1) from ['TMS$'] ) AS PERCENTAGE
FROM (代码1) t

group by [origin-destination],t.[SH/LANE/MOT]
having t.[SH/LANE/MOT] /count(*) <= 0.01
应该是这样吧。

还有,两个count都是int,相除会没有小数部分,所以应该都给转成带小数的数。cast as numeric(10,4) 这样的。追问

结果能出来但是,我总觉得最外层不应该再 group by t.[SH/LANE/MOT] ,虽然只有这样才能运行。
因为第一行除法的分母是根据t.[SH/LANE/MOT]分组后的SH 总数(包括所有MOT),

但是语句最后有两个分组条件,这样两个分组条件出来的结果就不是我要的分母了吧?

SQL语句怎么表示除法运算?

参考技术A

select case when 除数 =0 then 0 else 被除数/除数 end

一. 基本概念

SQL语言,是结构化查询语言(Structured Query Language)的简称。SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

二. 支持标准

SQL 是1986年10 月由美国国家标准局(ANSI)通过的数据库语言美国标准,接着,国际标准化组织(ISO)颁布了SQL正式国际标准。1989年4月,ISO提出了具有完整性特征的SQL89标准,1992年11月又公布了SQL92标准,在此标准中,把数据库分为三个级别:基本集、标准集和完全集。

三. 记录筛选

sql="select * from 数据表 where字段名=字段值 order by字段名[desc]"(按某个字段值降序排列。默认升序ASC)

sql="select * from 数据表 where字段名like '%字段值%' order by 字段名 [desc]"

sql="select top 10 * from 数据表 where字段名=字段值 order by 字段名 [desc]"

sql="select top 10 * from 数据表 order by 字段名 [desc]"

sql="select * from 数据表 where字段名in ('值1','值2','值3')"

sql="select * from 数据表 where字段名between 值1 and 值2"

以上是关于SQL如何做除法的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句怎么表示除法运算?

sql 查询出的结果进行除法运算,结果无法四舍五入。求助!

Excel怎么进行乘法和除法

sql05除法进位取整问题

用辗转相除法求2个数的最大公约数,怎么做?

WPS 表格怎么做除法?并保留小数一位?