我在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不存在.
我有一个看起来像这样的观点
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,因此没有使用枢轴运算符.
感谢您的回复.
问题:
假设有一个简单(但很大)的表 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(高效但格式错误): …
我在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
我刚开始时遇到困难,因为我真的需要将列名更改为值并转动结果.我尝试过使用交叉表,但我并不完全确定这是我需要的.任何可以让我朝着正确的方向前进的建议或建议都将非常感激.
我有一个名为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)