在查询数据的时候 需要查询含有某种条件的数量,用一个count可能解决不了。那么就要试用一下Sum配合case函数了。
eg:SUM( CASE WHEN n.state=0 THEN 1 ELSE 0 END ) AS normalcount
查询符合state=0的数据总量
也可在内部查询: SUM( CASE WHEN
(SELECT TYPE FROM t_dev_alarm_state WHERE id = t1.`alarmstateid`) = 2
THEN 1 ELSE 0 END ) AS failurecount,
SELECT * ,r.realname as mname,r.telephone as mtelephone ,COUNT(p.deviceid) AS Dnum,
SUM( CASE WHEN n.state=0 THEN 1 ELSE 0 END ) AS normalcount,
SUM( CASE WHEN n.state=1 THEN 1 ELSE 0 END ) AS alarmcount,
SUM( CASE WHEN n.state=2 THEN 1 ELSE 0 END ) AS failurecount,
SUM( CASE WHEN n.state=3 THEN 1 ELSE 0 END ) AS othercount
FROM t_device_group g
LEFT JOIN t_user_dgroup_relation u ON u.devicegroupid=g.id
LEFT JOIN t_user r ON g.managerid=r.id
LEFT JOIN t_device_group_relation p ON p.groupid=u.devicegroupid and p.moduleid=#{moduleid}
LEFT JOIN
<if test="moduleid == 1">t_device_dc</if>
<if test="moduleid == 2">t_device_yg</if>
<if test="moduleid == 3">t_device_jg</if>
<if test="moduleid == 8">t_device_hw</if>
<if test="moduleid == 9">t_device_ljt</if>
<if test="moduleid == 10">t_device_sj</if>
<if test="moduleid == 11">t_device_mc</if>
<if test="moduleid == 12">t_device_krq</if>
<if test="moduleid == 13">t_device_ywj</if>
n ON n.id=p.deviceid
WHERE u.userid=#{userid} AND g.moduleid=#{moduleid} and g.isdelete = 0 and g.isenable = 1 and n.isdelete=0
<if test="code != null and code != ''">
AND (g.groupcode LIKE CONCAT('%', #{code}, '%')
or
g.groupname LIKE CONCAT('%', #{code}, '%'))
</if>
GROUP BY g.id