sql(10分)

  • 主题发起人 主题发起人 蓝蒙
  • 开始时间 开始时间

蓝蒙

Unregistered / Unconfirmed
GUEST, unregistred user!
有表talble
姓名 性别 (1 男 2 女) 班级
张三 1 高一
李四 1 高二
王五 2 高一
赵六 1 高二
现在想得到如下数据,怎么写sql
班 级 男:女
高一 1:1
高二 2:0
 
SELECT A.班级,RATE=B.男/C.女
FROM (
SELECT DISTINCT 班级
FROM TABLE
) AS A
LEFT JOIN (
SELECT 班级,男=COUNT(*)
FROM TABLE
WHERE 性别=1
) AS B ON B.班级=A.班级
LEFT JOIN (
SELECT 班级,女=COUNT(*)
FROM TABLE
WHERE 性别=2
) AS C ON C.班级=A.班级
GROUP BY A.班级
 
select 班级,sum(case 性别 when 1 then 1 else 0 end)/sum(case 性别 when 2 then 1 else 0 end) from table group by 班级
 
SELECT 班级, (CONVERT(varchar(3), SUM(CASE 性别 WHEN '1' THEN 1 END)) + ':' + CONVERT(varchar(3), SUM(CASE 性别 WHEN '2' THEN 1 END))) AS 比例
FROM yourtable
GROUP BY 班级
 
select [Class] as 班级 ,count(Gender) as 全部人数 ,Sum(Gender) as 男生, (count(Gender)-Sum(Gender)) as 女生 from [Class] group by [Class]

在高端数据库和低端数据库都 可用
 
楼上大哥,如果'0'代表女生的话你的代码没问题
'2'代表女生的话问题就大了
Sum(Gender) as 男生
会超出总人数,
(count(Gender)-Sum(Gender)) as 女生
会变成负数
 
zamen的没有问题把,楼上在仔细看看,呵呵
 
后退
顶部