- 论坛徽章:
- 0
|
原帖由 rardge 于 2006-3-7 15:01 发表
select classid, count(case when mark > 60 then 1 end) as m, count(case when fen > 70 then 1 end) as f from tbname group by classid
受 Namelessxp 启发而写,我老是不记得去用 case when,一直习惯 ...
结果正确
附上我的验证用的,不知道为啥,不爱在count里面用case when,下面是跟PHP数组结合做的
- $dbhost = 'localhost';
- $dbuser = 'root';
- $dbpass = '';
- $dbused = 'test';
- $tbname = 'ttt';
- $sql = "SELECT COUNT(*) as num,CASE WHEN Mark>60 AND fen>70 THEN 1 WHEN fen>70 THEN 2 WHEN Mark>60 THEN 3 ELSE 4 END as gid,classID FROM $tbname GROUP BY classID,gid";
- $dh = mysql_connect($dbhost,$dbuser,$dbpass) or die("Connect fail");
- mysql_select_db('test',$dh) or die("Select DB fail");
- $query = mysql_query($sql) or die("Query fail");
- while ($row = mysql_fetch_array($query)){
- $result[$row['classID']][$row['gid']] = $row['num'];
- }
- mysql_close($dh);
- echo '<plaintext>';
- var_dump($result);
- if (is_array($result)){
- foreach ($result as $key => $val){
- echo "班级:$key \n";
- echo "fen:".($val[1]+$val[2]+0);
- echo " Mark:".($val[1]+$val[3]+0);
- echo " Other:".($val[4]+0)."\n";
- }
- }
- exit;
复制代码
- CREATE TABLE `ttt` (
- `StudentID` int(10) default NULL,
- `ClassID` int(10) default NULL,
- `Mark` int(10) default NULL,
- `fen` int(10) default NULL
- ) TYPE=MyISAM
复制代码 |
|