java - 如何在 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。如何获取所有值?提前致谢。干杯。
解决方案
如前所述,在数据库之外执行此操作可能更容易,但如果您确实想在数据库中执行此操作,您可以:
- 用于
union all
从传递的目标列表中构造一个结果集,然后 - 离开加入它然后
- 像你现在正在做的小组
查询将如下所示:
<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>
推荐阅读
- java - 如何使用`@Backoff`注释中的属性文件中的属性来自定义延迟时间?
- c# - 如何转换此代码以便在 Unity 中使用?
- excel - 将复杂的日期函数转换为
- html-table - markdown-it:在 .md 文件中格式化表格
- reactjs - Webpack 在文件更改时提供另一个 url
- python - Python - 打开一个文件
- windows - 在笔记本电脑上恢复出厂设置
- python - 使用 SpaCy 和 Pandas 更快地提取 NER
- node.js - 使用 Nodejs 时出现权限错误
- google-cloud-platform - 谷歌语音识别弱日期转录