Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在sql中基于row_number计算百分比

在sql中基于row_number计算百分比
EN

Stack Overflow用户
提问于 2017-03-30 05:01:23
回答 2查看 2.2K关注 0票数 2

我正在尝试编写一个sql查询,对于每个返回的行,还将根据其行位置返回一个百分比(0-100)。更复杂的是,查询目前也是分组的。下面是一些要处理的示例数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table #test(StockId int)
insert into #test values (101), (101), (202), (202), (303), (404), (505)

select 
StockId,
count(*) as BinMovements
from #test
group by StockId
order by BinMovements desc

此查询当前返回:

StockId,BinMovements 101,2 202,2 303,1 404,1 505,1

(虽然很明显,由于BinMovements是2或1,所以以不同的顺序返回StockIds也同样正确,例如):

202,2 101,2 404,1 303,1 505,1

我想添加一个“百分比”列,但这实际上是基于行位置的,所以我希望看到以下值:

101,2,100 202,2,80 303、1、60 404,1,40 505、1、20

我想这个解决方案可能涉及到ROW_NUMBER,我从这条路径开始,以为我可以得到ROW_NUMBER /总计行* 100,但由于某些原因,这是行不通的。可能是因为集团的条款?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 
StockId,
count(*) as BinMovements,
ROW_NUMBER() OVER(order by (count(*))) as RowNumber,
count(*) over () as TotalCount,
(ROW_NUMBER() OVER(order by (count(*)))) / (count(*) over ()) * 100 as Percentage
from #test
group by StockId
order by RowNumber desc

返回:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
StockId BinMovements    RowNumber   TotalCount  Percentage
202     2               5           5           100
101     2               4           5           0
505     1               3           5           0
404     1               2           5           0
303     1               1           5           0

如果可能的话,我更愿意在单个选择中这样做,但如果不将其包装在外部选择中,则可能是一个解决方案。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-30 05:09:46

COUNT函数和ROW_NUMBER函数都返回BIGINT。因此,除法的结果也转化为BIGINT。

这是可行的(你应该在除以前乘以):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(ROW_NUMBER() OVER(order by (count(*)))) * 100 / (count(*) over ()) as Percentage
票数 1
EN

Stack Overflow用户

发布于 2017-03-30 05:15:53

使用类似于您的问题的count() over()row_number(),只需重新排序方程。

请注意,用于order byrow_number()与语句的order by相反,因为我们希望将百分比从100开始。否则,您可以以80作为第一行,100作为第二行,等等。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 
    StockId
  , BinMovements = count(*)
  , Percentage = 100/count(*) over () 
    * row_number() over (order by count(*) asc, stockid desc)
from #test
group by StockId
order by BinMovements desc, StockId asc

rextester演示:http://rextester.com/TCPE10348

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+---------+--------------+------------+
| StockId | BinMovements | Percentage |
+---------+--------------+------------+
|     101 |            2 |        100 |
|     202 |            2 |         80 |
|     303 |            1 |         60 |
|     404 |            1 |         40 |
|     505 |            1 |         20 |
+---------+--------------+------------+

如果您想要小数百分比,请将方程中的100更改为100.0

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43118673

复制
相关文章
MySQL是如何打开和关闭表?
当我们在执行mysqladmin status 命令或连接通过mysql客户端连接到实例后,执行\s的时候,应该看到类似以下的内容:
SEian.G
2021/07/29
3.6K0
HTTP的KeepAlive是开启还是关闭?
http://itindex.net/detail/50719-http-keepalive
跟着阿笨一起玩NET
2018/09/20
2.2K0
Android获取软键盘的高度、键盘的打开与关闭、监听键盘处于打开还是关闭状态
最近在项目中,需要获取到软键盘的高度,再将底部的布局上移键盘的高度,话不多说,直接上代码:
SoullessCoder
2019/08/07
7.8K0
如何判断是关闭还是刷新网页
我们在写js代码的时候,经常要判断网页是否被关闭了,如果是被关闭了,就执行某段代码,这个可以用HTML的onbeforeunload事件来执行一段js代码,但是如果网页只是被刷新的话,也同样会触发onbeforeunload事件,下面这段js代码可以判断是否关闭 //判断是关闭还是刷新 if(event.clientX>document.body.clientWidth&&event.clientY<0||event.altKey) {     alert("你关闭了浏览器"); } 这段代码就是判断触发onbeforeunload事件时,鼠标是否点击了关闭按钮,或者按了ALT+F4来关闭网页,如果是,则认为系统是关闭网页,否则在认为系统是刷新网页
源哥
2018/08/28
3.1K0
mysql or条件可以使用索引而避免全表
CREATE TABLE IF NOT EXISTS `t_myisam` ( `id` int(1) NOT NULL AUTO_INCREMENT, `uid` int(11) NOT NULL, `aNum` char(20) DEFAULT NULL, PRIMARY KEY (`id`), KEY `uid` (`uid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ;
黄规速
2022/04/14
1.5K0
mysql or条件可以使用索引而避免全表
导出SAP数据库表的字段和数据元素等详细信息
SAP→SE16N→DD03L 然后筛选表名,获取该表所有数据,然后进行导出,选择导出格式为自定义XMXL 缺点:导出字段顺序无法控制,按字母顺序排列;无法导出字段描述。
不会写代码的杰尼
2022/05/19
2K0
导出SAP数据库表的字段和数据元素等详细信息
HTTPKeepAlive,开启还是关闭
所谓「HTTP Keep-Alive」,在维基百科里称为「HTTP Persistent Connection」,说白了就是复用HTTP连接,如此一来理论上客户端的用户体验会更流畅,但是与之相对服务端不得不维持大量的连接。开启还是关闭,这是个问题。
LA0WAN9
2021/12/14
4870
oracle可以更改表名,sql – 更改Oracle表名
CONSTRAINT ORDER_SOURCE_PK PRIMARY KEY(OS_ID)
全栈程序员站长
2022/08/30
1.8K0
Tiktok 根据主播id(uniqueId)获取个人详细信息
https://download.csdn.net/download/qq_38154948/87942615
拉灯的小手
2023/06/23
9470
es 更改索引类型-存档
POST /livingdata/_mapping/?pretty { "properties": { "totalCount":{ "type": "text",
用户9347382
2022/02/17
5610
10.2 打开与关闭文件
例如:fopen(“a1”,“r”),表示要打开名字为“a1”的文件,使用文件方式为“读入”。
小林C语言
2019/07/12
7430
10.2 打开与关闭文件
文件的打开与关闭
使用完一个文件后应该关闭它,以防止程序对文件误操作而导致出错。文件关闭是指撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件。
pigeon
2022/04/11
1.3K0
文件的打开与关闭
判断网页是通过PC端还是移动终端打开的
通过判断浏览器的 userAgent,用正则来判断手机是否是ios和Android客户端。代码如下:
德顺
2019/11/13
5.3K0
Redis跳跃表是如何添加元素的?
Java 面试不可能不问 Redis,问到 Redis 不可能不问 Redis 的常用数据类型,问到 Redis 的常用数据类型,不可能不问跳跃表,当问到跳跃表经常会被问到跳跃表的查询和添加流程,所以接下来我们一起来看这道题的答案吧。
磊哥
2023/07/09
1910
Redis跳跃表是如何添加元素的?
Redis跳跃表是如何添加元素的?
Java 面试不可能不问 Redis,问到 Redis 不可能不问 Redis 的常用数据类型,问到 Redis 的常用数据类型,不可能不问跳跃表,当问到跳跃表经常会被问到跳跃表的查询和添加流程,所以接下来我们一起来看这道题的答案吧。
磊哥
2023/06/27
2230
Redis跳跃表是如何添加元素的?
如何更改伪元素的样式
在前端开发中我们会经常用到伪元素,有时候需要通过js来修改伪元素的样式,那么有哪几种方式来修改伪元素的样式呢?
挥刀北上
2021/01/27
9.4K0
如何更改伪元素的样式
SQL server无法更改表
在设计器中,选择表设计器和数据库设计器,将阻止保存要求重新创建表的更改选项取消勾选 再次编辑表中内容时就不会再有错误弹窗。
magize
2023/07/11
2730
SQL server无法更改表
点击加载更多

相似问题

为什么‘a’标签需要`tabindex=0`?

20

如何在tabIndex = '0‘中添加TypeScript div?

29

为什么IE7要在没有表索引的元素中添加tabindex="0“?

12

动态添加tabindex

40

<a> click="“在tabindex='0‘时不起作用

151
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文