java - Sqlite:带条件的嵌套选择

标签 java android sql sqlite

我对 SQLite 不是很专家,我进行了搜索,但没有任何帮助。 查询是错误的,但逻辑是我需要的:

SELECT COUNT(*),
LEFT JOIN (SELECT COUNT(*) FROM tb_journal WHERE range_1 < 36 AND range_2 < 18 ),
LEFT JOIN (SELECT COUNT(*) FROM tb_journal WHERE range_1 > 36 AND range_1 < 100 AND range_2 > 18 AND range_2 < 100 ),
LEFT JOIN (SELECT COUNT(*) FROM tb_journal WHERE range_1 > 100 AND range_2 > 100 )
GROUP BY periodOfDay

我有下表:

id, range_1, range_2, periodOfDay

periodOfDay 为 0, 1, 2

我的目标是通过一个查询来获取一个数组

  • 记录总数
  • range_1 < 36 且 range_2 < 18 的记录总数
  • 36 < range_1 < 100 和 18 < range_2 < 100 的记录总数
  • range_1 > 100 36 且 range_2 > 100 的记录总数 按 periodOfDay 分组。这意味着我想要相应 periodOfDay 的每个条件的总记录。

有没有一种方法可以只用一个查询来实现这样的事情,而无需通过代码实现?

非常感谢。

最佳答案

使用条件聚合 - 即使用 CASE 作为 SUM() 的参数:

SELECT periodOfDay, COUNT(*),
       SUM(CASE WHEN range_1 < 36 AND range_2 < 18 THEN 1 ELSE 0 END),
       SUM(CASE WHEN range_1 > 36 AND range_1 < 100 AND range_2 > 18 AND range_2 < 100 THEN 1 ELSE 0 END),
       SUM(CASE WHEN range_1 > 100 AND range_2 > 100 THEN 1 ELSE 0 END)
FROM tb_journal
GROUP BY periodOfDay;

关于java - Sqlite:带条件的嵌套选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48962541/

相关文章:

java - 无法读取整个文件,仅读取一行

java - 如何防止 JAXB 转义字符串

sql - 优化sql更新语法而不是服务器

sql - 我如何总结一组中最早和最多的记录?

sql - PostgreSQL:根据特定列将多行聚合为 JSON 数组

java - JSF 代码格式化程序或 Eclipse XML 编辑器,每个标签换行?

java - 在二维数组java中依次查找字符的特定组合

java - 将屏幕分成 4 个相等的部分 - android

android - TextInputLayout启用= false后如何使TextInputEditText中的文本变为灰色?

android - 谁能在xamarin.android中解决我的ListView问题?