Sqlite:嵌套选择条件

时间:2018-02-24 11:53:29

标签: 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&lt;的记录总数36和range_2&lt; 18
  • 36 <&lt;记录的总数range_1&lt; 100和18&lt; range_2&lt; 100
  • range_1&gt;的记录总数100 36和范围_2> 100 按periodOfDay分组。这意味着我想要相应期间的每个条件的总记录.OfDay。

有没有办法通过一个查询来实现这样的事情,而无需通过代码实现它?

非常感谢。

1 个答案:

答案 0 :(得分:2)

使用条件聚合 - 即使用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;