【问题标题】:How can I get all results with count, where in, group by in mysql and myBatis?如何在 mysql 和 myBatis 中通过 count、where、group by 获得所有结果?
【发布时间】:2018-08-08 10:47:48
【问题描述】:

我想知道如何在 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。 如何获得所有值? 提前致谢。干杯。

【问题讨论】:

  • 您想计算一些不存在的东西(pgoal = 'D' 的行),而这对 sql 来说是困难的。在前端解决这个问题可能更容易。

标签: java mysql sql mybatis


【解决方案1】:

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

  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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多