首页 > 解决方案 > 如何在 mysql 和 myBatis 中通过 count、where、group by 获得所有结果?

问题描述

我想知道如何在 SQL 映射器中获取所有结果,包括计数值为 0。

我已经在我的 javascript 中发送了 ajax 请求。

var programGoals = ['A', 'B', 'C', 'D'];

(数据的计数值为 A=3,B=2,C=1,D=0。我想得到所有结果,包括 D 的 0)

它是 myBatis Mapper 文件。(使用 mysql)

   <select id="countCardsWithProgramGoal" resultType="java.util.HashMap" 
          parameterType="java.util.HashMap">
       select pgoal, count(*) as count
       from PROG
       where pgoal in
        <foreach collection="programGoals_list" item="item" index="index" 
            separator="," open="(" close=")">
            #{item}
        </foreach>
       group by pgoal;
</select>

它只返回 A、B、C 结果,不包括计数结果为 0 的 D。如何获取所有值?提前致谢。干杯。

标签: javamysqlsqlmybatis

解决方案


如前所述,在数据库之外执行此操作可能更容易,但如果您确实想在数据库中执行此操作,您可以:

  1. 用于union all从传递的目标列表中构造一个结果集,然后
  2. 离开加入它然后
  3. 像你现在正在做的小组

查询将如下所示:

<select id="countCardsWithProgramGoal" resultType="java.util.HashMap" 
      parameterType="java.util.HashMap">
   select g.pgoal, count(*) as count
   from (
     SELECT 
     <foreach collection="programGoals_list" item="item" index="index" 
        separator=" UNION ALL SELECT " >
        #{item} pgoal
    </foreach>
      ) as g
      left join PROG p on p.pgoal = g.pgoal
   group by pgoal;
</select>

推荐阅读