繁体   English   中英

Postgres knex 查询连接列

[英]Postgres knex query joining columns

我有一个 Postgres 数据库,它将数据存储在一个表中,该表具有以下列“date | uid | id | value | data”。

在 node.js 服务器上使用knex我目前从这个查询中得到:

data = await db(tableName).select(["date", "uid", "id", "value", "value as market_cap", "data"]).whereIn("id", ["index", "market_cap", "market"]);

结果如下:

"data": [
{
  "date": "2020-11-07T21:43:11.709Z",
  "uid": "nmvdqy0kh87sd8a",
  "id": "index",
  "value": "999.9999999999999",
  "market_cap": "999.9999999999999",
  "data": null
},
{
  "date": "2020-11-07T21:43:11.709Z",
  "uid": "nmvdqy0kh87sd8b",
  "id": "market_cap",
  "value": "10125616413",
  "market_cap": "10125616413",
  "data": null
},
{
  "date": "2020-11-07T21:43:11.709Z",
  "uid": "nmvdqy0kh87sd8c",
  "id": "market",
  "value": null,
  "market_cap": null,
  "data": {
    "1": [],
    "2": []
  }
},
...

];

日期对完全相同。 存储在 id "market_cap" 下的数据实际上存储为 "value",存储在 id "market" 下的数据实际上存储为 "data"。

现在,我真正需要的是:

"data": [
{
  "date": "2020-11-07T21:43:11.709Z",
  "value": "999.9999999999999",
  "market_cap": "10125616413",
  "data": {
    "1": [],
    "2": []
  }
},
...

];

有没有办法直接从数据库中获取这个数据结构,而不是在服务器上转换数据? 您提供 knex 查询/SQL 查询的奖励积分。 谢谢!

您可以通过在date上进行自date并选择具有特定 ID 的行来完成此操作。 左连接确保每个日期的结果,即使它们缺少数据类型。

select mv."date", mv.value, mc.value as market_cap, md.data
from market_snapshots mv
left join market_snapshots mc on mv."date" = mc."date" and mc.id = 'market_cap'
left join market_snapshots md on mv."date" = md."date" and md.id = 'market'
where mv.id = 'index';

试试吧

在 Knex 中,它类似于...

knex.select(['mv.date', 'mv.value', 'mc.value as market_cap', 'md.data'])
  .from({ mv: 'market_snapshots' })
  .leftJoin({ mc: 'market_snapshots' }, function() {
    this.on('mv.date', '=', 'mc.date').andOn(knex.raw('mc.id = ?', 'market_cap'))
  })
  .leftJoin({ md: 'market_snapshots' }, function() {
    this.on('mv.date', '=', 'md.date').andOn(knex.raw('md.id = ?', 'market'))
  })
  .where('mv.id', 'index')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM