Browse Source

处理答题排名, 数据统计没值的问题

wuweihao 3 years ago
parent
commit
5f608cf3d4

+ 4 - 6
gis_cms/src/main/java/com/gis/cms/mapper/QuestionUserMapper.java

@@ -14,12 +14,10 @@ import java.util.List;
 @Mapper
 public interface QuestionUserMapper extends IBaseMapper<QuestionUserEntity, Long> {
 
-//    @Select("SELECT DISTINCT a.user_id,  max(a.score) as score ,a.id, b.real_name as realName, a.create_time, a.question_group_id " +
-//            "FROM tb_question_user a left join sys_user b on b.id=a.user_id  WHERE question_group_id=#{questionGroupId} " +
-//            "GROUP BY user_id ORDER BY a.score desc, a.create_time limit 10")
-    @Select("SELECT DISTINCT a.user_id, a.score, a.id, b.real_name as realName, a.create_time, a.question_group_id " +
-            "FROM tb_question_user a left join sys_user b on b.id=a.user_id  WHERE question_group_id=#{questionGroupId} " +
-            "GROUP BY user_id ORDER BY a.score desc, a.create_time limit 10")
+
+    @Select("select a.*,b.real_name as realName from " +
+            "(select MAX(score) score, create_time, user_id,question_group_id  FROM tb_question_user WHERE is_delete=0 and question_group_id=#{questionGroupId} GROUP BY user_id) a " +
+            "LEFT JOIN sys_user b on b.id=a.user_id ORDER BY a.score DESC, a.create_time limit 10")
     List<QuestionUserEntity> ranking(Long questionGroupId);
 
 

+ 12 - 10
gis_cms/src/main/java/com/gis/cms/service/impl/ReportServiceImpl.java

@@ -66,19 +66,19 @@ public class ReportServiceImpl implements ReportService {
     @Override
     public Result user(DateDto param) {
 
-        // 停用、删除的用户不统计
+        // 停用、删除的用户不统计, 使用子查询
         StringBuffer sql = new StringBuffer(
-                "select a.role_name as name, count(b.user_id) as count from sys_role a " +
-                        "left JOIN sys_user_role b on b.role_id=a.id " +
-                        "left join sys_user c on c.id=b.user_id WHERE a.is_delete=0 ");
+                "select sr.role_name as name, zb.count from sys_role sr LEFT JOIN " +
+                        "(select b.role_id, count(b.user_id) as count from sys_user_role b left join sys_user c on c.id=b.user_id");
 
         if (StringUtils.isBlank(param.getStartTime()) || StringUtils.isBlank(param.getEndTime())) {
             return Result.failure("时间参数不能为空");
         }
-        sql.append(" and c.create_time >= ").append("'").append(param.getStartTime()).append("'");
+        sql.append(" where c.create_time >= ").append("'").append(param.getStartTime()).append("'");
         sql.append(" and c.create_time <= ").append("'").append(param.getEndTime()).append("'");
 
-        sql.append(" GROUP BY a.id");
+        sql.append(" GROUP BY b.role_id) zb");
+        sql.append(" on zb.role_id=sr.id where sr.is_delete=0");
         log.info("sql: {}", sql.toString());
 
 
@@ -178,10 +178,11 @@ public class ReportServiceImpl implements ReportService {
     @Override
     public Result vote(DateDto param) {
 
+        // 使用子查询
         StringBuffer sql = new StringBuffer();
-        sql.append("select a.name,COUNT(case when b.type='vote' and b.is_delete=0 then 1 end) countVote," +
-                "COUNT(case when b.type='like' and b.is_delete=0 then 1 end) countLike " +
-                "from tb_goods_module a left join tb_goods_vote b on b.goods_module_id=a.id WHERE a.is_delete=0");
+        sql.append("select a.name, zb.countVote, zb.countLike from tb_goods_module a LEFT JOIN");
+        sql.append(" (select b.goods_module_id,COUNT(case when b.type='vote' then 1 end) countVote," +
+                "COUNT(case when b.type='like' then 1 end) countLike from  tb_goods_vote b WHERE b.is_delete=0");
 
 
         if (StringUtils.isBlank(param.getStartTime()) || StringUtils.isBlank(param.getEndTime())) {
@@ -191,7 +192,8 @@ public class ReportServiceImpl implements ReportService {
         sql.append(" and b.create_time <= ").append("'").append(param.getEndTime()).append("'");
 
 
-        sql.append(" GROUP BY a.id");
+        sql.append(" GROUP BY b.goods_module_id) zb");
+        sql.append(" on zb.goods_module_id=a.id where a.is_delete=0");
 
         log.info("sql: {}", sql.toString());