<select id="selectScoreInfo" resultType="java.util.Map" parameterType="java.util.Map">
select DZShare.T_Y_SBBHDEVICE_SITE.* ,
ROUND(DZShare.T_Y_SCORE.actual_score ,2) as actual_score ,
ROUND(DZShare.T_Y_SCORE.total_score ,2) as total_score,
DZShare.T_Y_SCORE.time ,
DZShare.T_Y_SCORE.id as scoreId ,
DZShare.T_Y_SCORE.status ,
DZShare.T_Y_TYPE_ENGINEERING_D.engineering_name ,
(select DZShare.T_Y_SCORE.total_score - sum( DZShare.T_Y_SCORE_DETAILS.score) from
DZShare.T_Y_SCORE_DETAILS where DZShare.T_Y_SCORE_DETAILS.score_id = DZShare.T_Y_SCORE.id)
as originalScore
from DZShare.T_Y_SBBHDEVICE_SITE , DZShare.T_Y_SCORE , DZShare.T_Y_TYPE_ENGINEERING_D
where 1=1
and DZShare.T_Y_SBBHDEVICE_SITE.id = DZShare.T_Y_SCORE.sbbhdevice_id
and DZShare.T_Y_TYPE_ENGINEERING_D.id = DZShare.T_Y_SBBHDEVICE_SITE.engineering_id
<if test="country != null and country != '' ">
and DZShare.T_Y_SBBHDEVICE_SITE.country in (
<foreach collection="country" index="index" item="item" separator="," >
#{item}
</foreach>
)
</if>
<if test="workSiteName != null and workSiteName != '' ">
and DZShare.T_Y_SBBHDEVICE_SITE.work_site_name like '%${workSiteName}%'
</if>
<if test="time != null and time != '' ">
and DZShare.T_Y_SCORE.time = '${time}'
</if>
<if test="engineering_code != null and engineering_code != '' ">
and DZShare.T_Y_SBBHDEVICE_SITE.engineering_id in (
select id from DZShare.T_Y_TYPE_ENGINEERING_D where
DZShare.T_Y_TYPE_ENGINEERING_D.engineering_code in (
<foreach collection="engineering_code" index="index" item="item" separator=",">
#{item}
</foreach>
)
)
</if>
<if test="status != null">
and DZShare.T_Y_SCORE.status = #{status}
</if>
order by DZShare.T_Y_SCORE.actual_score desc nulls last
</select>
在统计计分时, 排序后,null值会默认排在最前面。
这是需要:
**
order by table.caloum desc nulls last 或者 nulls first
**
本文介绍了一个使用MyBatis进行复杂数据查询的例子,包括多表联查、条件筛选及特殊排序方式等。该查询从设备站点表、得分表及工程项目类型表中选取相关信息,并根据实际得分降序排列,特别处理了NULL值的排序。
9887

被折叠的 条评论
为什么被折叠?



