请教一条SQL语句

huaneramn 2015-04-02 03:30:44
编号 字段1 字段2
001 …… ……
002 …… ……
002 …… ……
003 …… ……
003 …… ……
003 …… ……
004 …… ……

我有一个表,是上面这样的,不同的编号下有不同条数据,我需要读出不同的编号,编号下有多少条数据,并求出占比,比如上面总共有7条数据,002下面有2条,占比就是2除以7
结果要如下,

编号 数量 占比
001 1 %
002 2 %
003 3 %
004 1 %


请问这条SQL语句怎么写?
...全文
217 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
huaneramn 2015-04-03
  • 打赏
  • 举报
回复
引用 3 楼 yangliweng2 的回复:
来给你说下思路吧,首先我们 是要分组查出编号1,编号2,编号3, 比如编号1有多少个,编号2有多少个,就是用group by 语句,这个语句只是做了一个分组查询而已。 然后关键的地方就是统计“每一组”的个数,比如分好组了001和002就是2组,只要组名相同,那么就会剔除相同的组名。 聚合函数的作用就是对每个分组的个数进行统计, 置于所查询出来的个数的话,如果你尝试用distinct去做的话,你会发现查询出来的列数和group by 是一样的。 置于答案上面的大神们已经写了,我就不重复了。
String sql = "select SerialID,count(1) as singel,count(1)/(Select count(*) from U_BreakDown a left join U_SerialNumber b on(a.SerialID=b.Code) left join U_ProcBatch c on(b.BatchID=c.Code) where c.ModelID='" + strModel + "' and BreakDownTime between '" + starttime + "' and '" + endtime + "' and ProductStageID='" + stageid + "') as percent from U_BreakDown a left join U_SerialNumber b on(a.SerialID=b.Code) left join U_ProcBatch c on(b.BatchID=c.Code) where c.ModelID='" + strModel + "' and BreakDownTime between '" + starttime + "' and '" + endtime + "' and ProductStageID='" + stageid + "' group by SerialID"; 红字就是我要查的数据,绿字和后面的红字就是你们说的总数量,最后提示percent附近语法错误。
huaneramn 2015-04-03
  • 打赏
  • 举报
回复
引用 2 楼 wyd1520 的回复:
select 编号,Count(1) as 数量,Count(1)/(select count(1) From 表)*100 as 占比 from 表 group by 编号

String sql = "select SerialID,count(1) as singel,count(1)/(Select count(*) from U_BreakDown a left join U_SerialNumber b on(a.SerialID=b.Code) left join U_ProcBatch c on(b.BatchID=c.Code) where c.ModelID='" + strModel + "' and BreakDownTime between '" + starttime + "' and '" + endtime + "' and ProductStageID='" + stageid + "') as percent 
from U_BreakDown a left join U_SerialNumber b on(a.SerialID=b.Code) left join U_ProcBatch c on(b.BatchID=c.Code) where c.ModelID='" + strModel + "' and BreakDownTime between '" + starttime + "' and '" + endtime + "' and ProductStageID='" + stageid + "' 
group by SerialID";
红字就是我要查的数据,绿字和后面的红字就是你们说的总数量,最后提示percent附近语法错误。
zujinsheng 2015-04-02
  • 打赏
  • 举报
回复
主要是用到 聚合函数 count(), 和分组 group by
nangangshi 2015-04-02
  • 打赏
  • 举报
回复
select 编号,Count(*)/(select count(*) From 表)*100 as 占比 from 表 group by 编号
「已注销」 2015-04-02
  • 打赏
  • 举报
回复
来给你说下思路吧,首先我们 是要分组查出编号1,编号2,编号3, 比如编号1有多少个,编号2有多少个,就是用group by 语句,这个语句只是做了一个分组查询而已。 然后关键的地方就是统计“每一组”的个数,比如分好组了001和002就是2组,只要组名相同,那么就会剔除相同的组名。 聚合函数的作用就是对每个分组的个数进行统计, 置于所查询出来的个数的话,如果你尝试用distinct去做的话,你会发现查询出来的列数和group by 是一样的。 置于答案上面的大神们已经写了,我就不重复了。
本拉灯 2015-04-02
  • 打赏
  • 举报
回复
select 编号,Count(1) as 数量,Count(1)/(select count(1) From 表)*100 as 占比 from 表 group by 编号
  • 打赏
  • 举报
回复
declare @tcount int
select @tcount =count(0) from table
select 编号,count(0)*100.0/@tcount  from table group by 编号

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧