You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单条Couchbase查询中对同一字段使用双WHERE条件查询?

在Couchbase单条查询实现同一字段多条件统计

你完全可以借助N1QL的条件聚合来搞定这个需求,用SUM(CASE)语句分别筛选符合小时和全天条件的记录,一次性算出两个销售额数值。

假设你的文档结构包含sales(销售额)和timestamp(交易时间)字段,示例如下:

{
  "sales": 150,
  "timestamp": "2024-05-20T16:45:00Z"
}

对应的N1QL查询语句如下:

SELECT
  -- 统计当日目标小时的销售额,这里以16点为例
  SUM(CASE 
        WHEN DATE_PART_STR(timestamp, 'hour') = '16' 
             AND DATE_TRUNC_STR(timestamp, 'day') = DATE_TRUNC_STR(NOW(), 'day')
        THEN sales ELSE 0 
      END) AS hourly_sales,
  -- 统计当日总销售额
  SUM(CASE 
        WHEN DATE_TRUNC_STR(timestamp, 'day') = DATE_TRUNC_STR(NOW(), 'day')
        THEN sales ELSE 0 
      END) AS total_day_sales
FROM
  `your_bucket_name`
WHERE
  -- 先过滤当日数据,减少聚合计算量
  DATE_TRUNC_STR(timestamp, 'day') = DATE_TRUNC_STR(NOW(), 'day');

核心逻辑说明:

  • CASE语句会逐条判断记录是否符合条件:符合则取sales值,不符合则取0
  • 外层SUM函数对所有符合条件的sales求和,直接得到两个聚合结果
  • WHERE子句提前过滤出当日数据,能大幅提升查询效率,避免扫描全量数据

如果你的时间字段是数值型时间戳,只需用FROM_UNIXTIME()转换后再做日期判断,示例如下:

SELECT
  SUM(CASE 
        WHEN DATE_PART_STR(FROM_UNIXTIME(timestamp), 'hour') = '16' 
             AND DATE_TRUNC_STR(FROM_UNIXTIME(timestamp), 'day') = DATE_TRUNC_STR(NOW(), 'day')
        THEN sales ELSE 0 
      END) AS hourly_sales,
  SUM(CASE 
        WHEN DATE_TRUNC_STR(FROM_UNIXTIME(timestamp), 'day') = DATE_TRUNC_STR(NOW(), 'day')
        THEN sales ELSE 0 
      END) AS total_day_sales
FROM
  `your_bucket_name`
WHERE
  DATE_TRUNC_STR(FROM_UNIXTIME(timestamp), 'day') = DATE_TRUNC_STR(NOW(), 'day');

执行这条查询后,就能直接得到你需要的结果格式:

{
  "hourly_sales": 500,
  "total_day_sales": 5000
}

内容的提问来源于stack exchange,提问作者raed abu sada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:54:51