现在有一个表如下
id name sign_date class
1 张三 2012-11-13 1
2 李四 2012-11-13 1
3 王五 null 2
4 无名氏 null 2
现在想用一条sql语句查询,把学生按照class进行分组,求出学生的签到数跟签到率.
比如这个表,得出的结果应该是两个结果集,第一个是class为1的,里面包含3个信息分别是班级 签到人数 签到率{1,2,100%}第二个结果集是class为2的,{2,0,0%}
如题,求解.
签到人数可以求,签到总人数也可以.但是我现在想要一条sql直接求出来.
我想的是select class,count(id),concat(round(count(id)*100/count,2),'%') from table,(select count(*) as count from table group by class)t where sign_date is not null group by class
可是这样count(id)不仅查table表,还会查t表,最后总数都不对了.现在我又没法分开查询然后去除法,因为我需要一个list直接封进json
额……理解一下阁下的意思
你是说你算的签到率是按照 某班签到人数/总签到人数 × 100%?
如果如此的话可以这样:
SELECT
CLASS,
SIGN_DATE,
COUNT(*) CLASSSIGN,
COUNT(*)/TEMP.ALL * 100 CLASSSIGNTOALL
FROM
TABLE,
(SELECT
SIGN_DATE,
COUNT(*) ALL
FROM
TABLE
GROUP BY
SIGN_DATE) TEMP
WHERE
TABLE.SIGN_DATE = TEMP.SIGN_DATE
GROUP BY
CLASS,
SIGN_DATE
谢谢,问题已经解决了.原来别人写的是把sign_date当做条件去查询了,我一直沿用这个sql去写.现在换了个思路只分组然后count(sign_date)
签到:select class,count(sign_date) as sl,concat(round(count(sign_date)*100/count(*),2),'%') as qdl from table group by class
未签到:select class,(count(*)-count(sign_date)) as sl,concat(round(count(sign_date)*100/count(*),2),'%') as qdl from table group by class