首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >库基N1QL子选择与组组合

库基N1QL子选择与组组合
EN

Stack Overflow用户
提问于 2017-03-31 14:44:33
回答 1查看 447关注 0票数 0

我有以下航班报价数据结构:

代码语言:javascript
复制
{
  "offerIdentifier": "123",
  "flyFrom": "HAM",
  "flyTo": "LGW",
  "provider": "LH",
  "price": 207,
  "bookingUrl": "https://example.com/",
  "flightCombinationIdentifier": "HAM-LGW-201791570-20179171835"
}

flightCombinationIdentifier属性的值可以出现在多个报价中。

现在,我想按照flightCombinationIdentifier进行分组,并找到这种组合的最低价格,这样的组合理想的结果应该是这样的结构:

代码语言:javascript
复制
{
  "offerIdentifier": "456",
  "flightCombinationIdentifier": "HAM-LGW-201791570-20179171835",
  "offer": [
    {
      "bookingUrl": "http://example.com/",
      "price": 97,
      "provider": "LH"
    }
  ]
}

因此,我想出了以下N1QL查询:

代码语言:javascript
复制
select b.flightCombinationIdentifier,
    (
        select b1.price, b1.provider, b1.bookingUrl from bucket b1
        use keys b.offerIdentifier
        where b1.flightCombinationIdentifier = b.flightCombinationIdentifier
        order by b1.price asc
        limit 1
    ) as offer

from bucket b
where b.flyFrom = 'HAM' and b.flyTo = 'LGW'
group by b.flightCombinationIdentifier

不幸的是,它因以下错误而死亡:

代码语言:javascript
复制
[
  {
    "code": 4210,
    "msg": "Expression must be a group key or aggregate: (select (`b1`.`price`), (`b1`.`provider`), (`b1`.`bookingUrl`) from `bucket` as `b1` use keys (`b`.`offerIdentifier`) where ((`b1`.`flightCombinationIdentifier`) = (`b`.`flightCombinationIdentifier`)))  order by (`b1`.`price`) limit 1) as `offer`",
    "query_from_user": "select b.flightCombinationIdentifier,\n    (\n        select b1.price, b1.provider, b1.bookingUrl from bucket b1\n        use keys b.offerIdentifier\n        where b1.flightCombinationIdentifier = b.flightCombinationIdentifier\n        order by b1.price asc\n        limit 1\n    ) as offer\n    \nfrom bucket w\nwhere b.flyFrom = 'HAM' and b.flyTo = 'LGW'\ngroup by b.flightCombinationIdentifier"
  }
]

将子查询的结果放入结果对象的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-02 14:20:03

代码语言:javascript
复制
SELECT flightCombinationIdentifier, MIN([price, {bookingUrl,price,provider}])[1] AS offer
FROM bucket WHERE flyFrom = 'HAM' AND flyTo = 'LGW'
GROUP BY flightCombinationIdentifier;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43143502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档