相关疑难解决方法(0)

PostgreSQL:在同一查询中使用计算列

我在postgres中使用计算列时遇到问题.下面给出了一个在SQL中工作的类似代码,是否可以重新创建它PostgreSQL

select cost_1, quantity_1, cost_2, quantity_2, 
      (cost_1 * quantity_1) as total_1,
      (cost_2 * quantity_2) as total_2,
      (calculated total_1 + calculated total_2) as total_3
from data;
Run Code Online (Sandbox Code Playgroud)

PostgreSQL类似的代码中返回错误:

列total_1和total_2不存在.

sql postgresql calculated-columns

46
推荐指数
4
解决办法
4万
查看次数

将列标题转置为postgresql中的行

我有一个看起来像这样的观点

          value1count     value2count value3count
          ----------------------------------------
             25              35          55
Run Code Online (Sandbox Code Playgroud)

我需要将列标题转换为行,所以我需要它看起来像

          Values              Count
         -----------------------------
           value1count         25
           value2count         35
           value3count         55
Run Code Online (Sandbox Code Playgroud)

我可以通过选择单个列名称作为第一列,将数据作为第二列,然后为所有列执行相同的并集来完成此操作.

有一个更好的方法吗?我正在使用PosgreSQL 8.1,因此没有使用枢轴运算符.

感谢您的回复.

sql postgresql

10
推荐指数
3
解决办法
2万
查看次数

如何有效地将不同的值计入SQL中的不同行?

问题:

假设有一个简单(但很大)的表 foods

id   name 
--   -----------  
01   ginger beer
02   white wine
03   red wine
04   ginger wine
Run Code Online (Sandbox Code Playgroud)

我想要计算有多少条目具有特定的硬编码模式,比如包含单词'ginger'(LIKE '%ginger%')或'wine'(LIKE '%wine%'),或其他任何内容,并将这些数字按照注释写入行.我正在寻找的结果如下

comment           total 
---------------   -----  
contains ginger   2
for wine lovers   3
Run Code Online (Sandbox Code Playgroud)

解决方案1(格式正确但效率低):

可以使用UNION ALL和构造以下内容

SELECT * FROM
(
  (
    SELECT
      'contains ginger' AS comment,
      sum((name LIKE '%ginger%')::INT) AS total
    FROM foods
  )
  UNION ALL
  (
    SELECT
      'for wine lovers' AS comment,
      sum((name LIKE '%wine%')::INT) AS total
    FROM foods
  )
)
Run Code Online (Sandbox Code Playgroud)

显然它的工作方式类似于简单地执行多个查询并在之后将它们缝合在一起.这是非常低效的.

解决方案2(高效但格式错误): …

sql database postgresql performance amazon-redshift

9
推荐指数
1
解决办法
862
查看次数

Postgresql枢轴?交叉?

我在postgres中有一个表(这是查询的结果),它有一组行(复杂的数据总和的结果),如下所示:(列名是每天的名称,以及每列的值是双精度.)

星期一星期二星期四星期四星期四星期五
1.24 1.11 4.51 3.21 2.21 1.01

我需要从一行中选择数据,因此结果如下所示:

日数
太阳1.24
周一1.11
周二4.51
周三3.21
周四2.21
周五1.01

我刚开始时遇到困难,因为我真的需要将列名更改为值并转动结果.我尝试过使用交叉表,但我并不完全确定这是我需要的.任何可以让我朝着正确的方向前进的建议或建议都将非常感激.

sql postgresql

6
推荐指数
1
解决办法
4869
查看次数

postgresql - 将单行更改为多行

我有一个名为payment_info的表,其中包含以下记录。

paymentid | customercode | previousbalance | paymentamount | remainingbalance
-----------------------------------------------------------------------------
PID0001   |    CUST024   |    10000        |     2500      |   7500
PID0002   |    CUST031   |    8500         |     3500      |   5000
PID0003   |    CUST005   |    12000        |     1500      |   10500
Run Code Online (Sandbox Code Playgroud)

然后我想要的是创建上表的每行 3 行。我希望我的结果看起来像这样。

Payment Group | Payment Line Item | Payment ID | Customer Code |     Type            | Amount    
--------------------------------------------------------------------------------------------------
   1          |         1         |  PID0001   |   CUST024     | PREVIOUS BALANCE    | 10000.00    
   1          |         2         |            |               | PAYMENT AMOUNT …
Run Code Online (Sandbox Code Playgroud)

sql postgresql

4
推荐指数
1
解决办法
4278
查看次数