【问题标题】:Sqlite: nested select with conditionsSqlite:带条件的嵌套选择
【发布时间】:2018-02-24 11:53:28
【问题描述】:

我不是 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
  • 范围_1 > 100 36 和范围_2 > 100 的记录总数 按 periodOfDay 分组。这意味着我想要相应 periodOfDay 的每个条件的总记录。

有没有办法只用一个查询来实现这样的事情而不通过代码实现它?

非常感谢。

【问题讨论】:

    标签: java android sql sqlite


    【解决方案1】:

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

    【讨论】:

    • 有没有办法 - 如果没有记录与 periodOfDay 的一种可能情况不对应 - 无论如何都用 0 参数将其写入最终结果?
    • @Soul 。 . .这回答了您提出的问题。你应该问另一个问题。如果您认为它回答了 this 问题,您也可以重新接受此答案。
    猜你喜欢
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 2011-01-19
    相关资源
    最近更新 更多