【发布时间】:2020-03-21 06:46:28
【问题描述】:
我在 Postgres 数据库中有一个 JSON 列,其中包含星期几的键和该日期的访问值。我想获取最大天数并将其添加为一周中所有天的值旁边的列。
我有以下我认为可以做到的查询。但我目前收到错误“列'星期一'不存在”
我从 JSON 中提取星期一后,为什么不存在星期一?内部查询工作正常,并按我的预期返回所有日期和相应的值(星期一、星期二、星期三、星期四、星期五的列)。我认为查询这些列并获得最大的列会相对容易。
SELECT Monday, Tuesday, Wednesday, Thursday, Friday,
GREATEST(Monday, Tuesday, Wednesday, Thursday, Friday) as MaxDay
FROM "VisitData"
WHERE
(SELECT
popularity_by_day ->> 'Monday' AS Monday,
popularity_by_day ->> 'Tuesday' AS Tuesday,
popularity_by_day ->> 'Wednesday' AS Wednesday,
popularity_by_day ->> 'Thursday' AS Thursday,
popularity_by_day ->> 'Friday' AS Friday
FROM "VisitData")
更新:
我现在在别名子查询之后有这个查询:
SELECT Monday, Tuesday, Wednesday, Thursday, Friday,
GREATEST(Monday, Tuesday, Wednesday, Thursday, Friday) as MaxDay
FROM
(SELECT
popularity_by_day ->> 'Monday' AS Monday,
popularity_by_day ->> 'Tuesday' AS Tuesday,
popularity_by_day ->> 'Wednesday' AS Wednesday,
popularity_by_day ->> 'Thursday' AS Thursday,
popularity_by_day ->> 'Friday' AS Friday
FROM "VisitData") AS visits
```
This gives me the structure of the output im expecting but the results are inconsistent.
For example row 1 in the result
Monday = 5
Tuesday = 89
Wednesday = 95
Thursday = 120
Friday = 102
MaxDay = 95 (why not 120)
And for row 2
Monday = 329
Tuesday = 350
Wednesday = 439
Thursday = 397
Friday = 314
MaxDay = 439 (This is correct)
【问题讨论】:
-
我认为您需要删除部分
"VisitData" WHERE,然后为子查询设置别名。 -
WHERE需要布尔表达式而不是子查询 -
嗨 - 请各位详细说明一下?似乎它们是相反的建议?还是有两种方法可以达到相同的目的?我认为子查询是一种干净的方法 - 但也许我错过了一些东西。非常感谢。
标签: sql postgresql