SQLite:带索引的查询

时间:2018-02-25 14:59:47

标签: java android sql sqlite

我正在使用以下查询,它完美运行:

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;

periodOfDay可以具有值0, 1, 2但是在数据库中可能没有记录与periodOfDay的可能情况之一没有对应。 无论如何,我想在0参数的最终结果中写下它。

没有代理java方面有可能吗?

谢谢!

修改

此问题的第一部分是here

1 个答案:

答案 0 :(得分:1)

使用LEFT JOIN

SELECT p.periodOfDay, COUNT(j.periodOfDay),
       SUM(CASE WHEN j.range_1 < 36 AND j.range_2 < 18 THEN 1 ELSE 0 END),
       SUM(CASE WHEN j.range_1 > 36 AND j.range_1 < 100 AND range_2 > 18 AND range_2 < 100 THEN 1 ELSE 0 END),
       SUM(CASE WHEN j.range_1 > 100 AND j.range_2 > 100 THEN 1 ELSE 0 END)
FROM (SELECT 1 as periodOfDay UNION ALL
      SELECT 2 as periodOfDay UNION ALL
      SELECT 3 as periodOfDay
     ) p LEFT JOIN
     tb_journal j
     ON p.periodOfDay = j.periodOfDay
GROUP BY p.periodOfDay;

请注意,所有列名都是合格的(即具有表别名)。当查询有多个表引用时,这是一个非常好的习惯。