首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在mysql和myBatis中使用count、where in、group by来获取所有结果?

如何在mysql和myBatis中使用count、where in、group by来获取所有结果?
EN

Stack Overflow用户
提问于 2018-08-08 18:47:48
回答 1查看 1K关注 0票数 -2

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

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

代码语言:javascript
运行
复制
var programGoals = ['A', 'B', 'C', 'D'];

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

这是myBatis映射器文件。(使用mysql)

代码语言:javascript
运行
复制
   <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。如何获取所有值?提前谢谢。干杯。

EN

回答 1

Stack Overflow用户

发布于 2018-08-09 03:41:24

如上所述,在数据库之外可能更容易做到这一点,但如果你确实想在数据库中做到这一点,你可以:

  1. 使用union all根据传递的目标列表构造一个结果集,然后
  2. 离开该结果集,然后使用
  3. group,就像您现在正在做的

查询将如下所示:

代码语言:javascript
运行
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51744775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档