SELECT '合计' AS assess_nuit_name, sum(t.as_electricity) AS as_electricity FROM( SELECT <include refid="Base_Column_List"/> FROM ecpi_as_daytjres <where> <if test="unitId != null"> unit_id = #{unitId} </if> <if test="startDate != null and startDate != '' and endDate != null and endDate != ''"> and as_time between #{startDate} and #{endDate} </if> <if test="searchText != null"> and assess_nuit_name = #{searchText} </if> </where> <if test="sortRule != null and sortField != null"> ORDER BY #{sortField} #{sortRule} </if> <if test="pageNum != null and pageSize != null"> LIMIT #{pageNum}, #{pageSize} </if> ) t是否正确
时间: 2024-02-10 15:33:59 浏览: 73
这是一个动态SQL语句,其中使用了MyBatis的XML语法。根据您提供的代码,该SQL语句的语法是正确的,但是其中的条件和限制可能会影响到求和结果是否为0。您可以在数据库中手动执行该SQL语句并检查结果是否正确。
此外,如果您使用的是MyBatis框架,建议您在配置文件中开启MyBatis的日志功能,以便在程序运行时查看生成的SQL语句和其执行结果。这样可以更方便地排查问题。
相关问题
select count(distinct assess_date) from kunxiaoan_snapshot where project_id =1 and assess_date >= '2023-05-12' and assess_date <='2023-05-12' ; select count(1) from ( select distinct assess_date from kunxiaoan_snapshot where project_id = 1 and assess_date >= '2023-05-12' and assess_date <= '2023-05-12' ) a 的区别
这两个 SQL 查询语句的结果相同,都是统计在指定日期范围内,某个项目的评估日期有多少个。
但是,这两个查询语句的实现方式略有不同。
第一个查询语句使用了 count(distinct) 函数,它会统计满足条件的不同值的数量。这里统计的是在指定日期范围内,kunxiaoan_snapshot 表中 project_id 为 1 的记录的不同评估日期数量。这种方式虽然简单,但当数据量较大时,效率较低。
第二个查询语句使用了子查询,它会先从 kunxiaoan_snapshot 表中筛选出满足条件的记录,然后再对其中的评估日期进行去重,最后统计不同的评估日期数量。这种方式虽然比较复杂,但当数据量较大时,效率较高。
综上所述,第二个查询语句的实现方式相比第一个查询语句更加高效,尤其是在数据量较大时。
SELECT id, name FROM pms_assess WHERE parent_id = ( SELECT catalog_id FROM pms_product WHERE id = 1663780757367164929 );如果没有结果则返回parent_id = 0的结果,使用CASE WHEN THEN实现
好的,你想要使用 CASE WHEN THEN 实现查询的需求,根据子查询的结果进行判断,如果有结果返回符合条件的结果,如果没有结果则返回 parent_id = 0 的结果。可以使用以下 SQL 语句实现:
```
SELECT id, name
FROM pms_assess
WHERE parent_id = (
SELECT
CASE
WHEN EXISTS (SELECT id FROM pms_assess WHERE parent_id = (SELECT catalog_id FROM pms_product WHERE id = 1663780757367164929))
THEN (SELECT catalog_id FROM pms_product WHERE id = 1663780757367164929)
ELSE 0
END
)
```
这个 SQL 语句会先执行子查询,查询符合条件的 catalog_id,如果存在则返回 catalog_id,否则返回 0。然后在外层查询中,根据返回的结果作为 parent_id 的条件进行查询,如果存在符合条件的结果则返回,否则返回 parent_id = 0 的结果。
希望这个回答能够解决你的问题。
阅读全文