我必须学习PostgreSQL来完成我的工作,我在我的个人电脑上问这个问题,所以我会提供概念性的场景,而不是直接复制/粘贴代码,如果可以的话。这个任务正在Lambda中执行,超时15分钟。
我基本上需要这样的查询:
1.对于表firstTable ft中的记录#1,如果列firstTable ft中的起点和终点= secondTable st中的起点和终点
1.它搜索A-Z列,如果secondTable st* 中的A列、B列、C列一直到Z * 列中的任何值大于0,则特别获取这些特定列
1.但是我只想获取数据值大于0的前3列,如果没有,就返回0
1.然后,我将对所获取的3列的值求和
我能够以一种占用内存的方式完成此操作,方法是存储数据并在两个表中循环查找满足条件的记录,但我觉得SQL查询会更有效,但我没有任何SQL经验。
我保证这个场景是因为我觉得它会比解释实际的表/值/等更好,这不是出于懒惰,哈哈。
select st.column A,st.column B,etc. st.column Z FROM firstTable ft,secondTable st WHERE(基本上每个单独的列都大于0,但是不知道如何正确地写出来)限制3
1条答案
按热度按时间mspsb9vt1#
1.
secondTable
,具有2+27列,分别命名为origin
、destination
,然后命名为A
至Z
这里的问题是如何高效地扫描和分析这27列的值,一个解决方案是使用
to_json
函数将这27列转换为一个json对象:然后根据您的条件过滤结果,使用
json_each
函数分解json对象,然后按升序排列json键,并选择前3个值〉0:2.
secondTable
,具有2+1个名为origin
、destination
和"a-z"
的列,类型为jsonb如果大多数情况下只满足某些列,则只使用jsonb类型的一个名为
"a-z"
的列而不是27个列可能是相关的。列"a-z"
包含一个jsonb对象,该对象的键对应于具有值的列A-Z。查询可以是:3.
secondTable
,包含2+2列,分别命名为origin
、destination
、label
和value
在此数据库设计中,相同的(来源、目的地)最多可以有27行,其中值A到Z在
label
列中,对应的值在value
列中。查询可以是:这些解决方案显然必须经过测试。