这样的需求一句SQL语句就可以解决吗?

xiongyuefei 2010-09-11 12:51:17
我想请教一个关于SQL查询的问题:
一个表里有五种职业,用workid表示,用sexid表示性别,现在我要统计五种职业各自的总人数,
然后分别统计五种职业里男,女各多少人,请问怎么写?
提供思路也好,我现在是分开写的SQL语句,然后再对结果合并,写在HTML的模板标签里。
在这里问下,是想知道有没有一句SQL语句就可以解决的?
...全文
111 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
百年树人 2010-09-11
  • 打赏
  • 举报
回复
select 
workid,
count(*) as `总人数`,
sum(case when sexid=0 then 1 else 0 end) as `男`,
sum(case when sexid=1 then 1 else 0 end) as `女`
from tb
group by workid


假设sexid 0-表示男 1-表示女
xiongyuefei 2010-09-11
  • 打赏
  • 举报
回复
是在MYSQL数据库里。
xiongyuefei 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 duanzhi1984 的回复:]
引用 5 楼 ayalicer 的回复:
不如建立个汇总表
插入删除修改的时候 直接修改汇总表的数值

这样其实很慢,对于频繁插入数据,修改汇总表的数据其实很很慢的。

如果要求不高的话就加WITH(NOLOCK) --这样在更新插入表时,不用受锁限制


SQL code
select
workid,
count(*) as `总人数`,
sum(case when s……
[/Quote]

太感谢你了,你的方法很好用。不过,我现在不确定的是,这样会影响数据库性能吗?
xiongyuefei 2010-09-11
  • 打赏
  • 举报
回复
怎么不能显示图片?我个晕!!
http://bbs.blueidea.com/attachment.php?aid=151802&k=ad8cd9cfbf2c7b5a6836ff2eb8e93623&t=1284186323&noupdate=yes¬humb=yes
duanzhi1984 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ayalicer 的回复:]
不如建立个汇总表
插入删除修改的时候 直接修改汇总表的数值
[/Quote]
这样其实很慢,对于频繁插入数据,修改汇总表的数据其实很很慢的。

如果要求不高的话就加WITH(NOLOCK) --这样在更新插入表时,不用受锁限制

select
workid,
count(*) as `总人数`,
sum(case when sexid=0 then 1 else 0 end) as `男`,
sum(case when sexid=1 then 1 else 0 end) as `女`
from tb WITH(NOLOCK)
group by workid
xiongyuefei 2010-09-11
  • 打赏
  • 举报
回复

谢谢楼上的建议,像上图这样的,用一句SQL语句如何做?会影响性能吗?
duanzhi1984 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiongyuefei 的回复:]
引用 2 楼 josy 的回复:
SQL code
select
workid,
count(*) as `总人数`,
sum(case when sexid=0 then 1 else 0 end) as `男`,
sum(case when sexid=1 then 1 else 0 end) as `女`
from tb
group by workid


假设sexi……
[/Quote]

性能不会差的。这个语句已经是最简单了。。

若还慢就在WORID加索引,试试。。。

不知道有几千万数据
  • 打赏
  • 举报
回复
不如建立个汇总表
插入删除修改的时候 直接修改汇总表的数值
xiongyuefei 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 josy 的回复:]
SQL code
select
workid,
count(*) as `总人数`,
sum(case when sexid=0 then 1 else 0 end) as `男`,
sum(case when sexid=1 then 1 else 0 end) as `女`
from tb
group by workid


假设sexid 0-表示男 1……
[/Quote]

谢谢这位兄弟,如果数据表有很大的数据,会不会影响性能?
请问各位,有更好的方案吗?
  • 打赏
  • 举报
回复
假设:
sexid=1表示male
sexid=2表示female
select workid,sum(2-sexid) as male,sum(sexid*2-2)/2 as female, sum(1) as total from tb

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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