我有以下文件:
{
"name" : "student_1",
"courses" : [
{
"name" : "Algebra",
"grades" : [ 98, 96, 92 ]
},
{
"name" : "Computers",
"grades" : [ 80 ]
}
]
}
Run Code Online (Sandbox Code Playgroud)
如何更新指定课程的成绩?例如,我想将课程中Algebra的某些测试增加10 分。
我在 PostgreSQL 中有一个 doubles 列(double precision[])的数组,它可以保留一天的半小时值。所以每个数组都有 48 个值。我需要一个有效的查询,它按索引对所有这些数组列求和,并生成一个新的 48 数组索引,如下所述
A = double[48] = {3,2,0,3....1}
B = double[48] = {1,0,3,2....5}
RESULT = double[48] = {A[0] + B[0], A[1] + B[1],...,A[47] + B[47]}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我有一个表,其中包含如下所示的数据:
id oe
-- ---------------------------------------------------
1 04715SNAA90,04715SNAA90ZZ,71501SNAA00,71501SNAA00ZZ
2 64526915083,64526953474
3 04715SNAA90,04715SNAA90ZZ,71501SNAA00,71501SNAA00ZZ
4 F4DH8C607AA,F4DHAA
5 F4DH8C607AA,F4DHAA
6 04715SNAA90,04715SNAA90ZZ,71501SNAA00,71501SNAA00ZZ
7 64526915083,64526953474
8 F4DH8C607AA,F4DHAA
9 F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
10 F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
11 04715SNAA90,04715SNAA90ZZ,71501SNAA00,71501SNAA00ZZ
12 64526915083,64526953474
13 F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
14 F4DH8C607AA,F4DHAA
15 F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
Run Code Online (Sandbox Code Playgroud)
如何编写查询,在其中传递值数组并返回该列包含数组中任何值的行?
这是有效的,因为我从查找表中获得了另一个值,而我宁愿不这样做,因为表中的hol列上没有索引pubnet。
[请不要建议添加一个,因为我无法修改数据库]
SELECT * FROM pubnet
where hol in (select hol from id2hol where id in ('F3DH19860AA', 'F4DHAA'))
Run Code Online (Sandbox Code Playgroud)
这将是结果集:
id oe
-- ---------------------------------------------------
4 F4DH8C607AA,F4DHAA
5 F4DH8C607AA,F4DHAA
8 F4DH8C607AA,F4DHAA
9 F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
10 F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
13 F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
14 F4DH8C607AA,F4DHAA
15 F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
Run Code Online (Sandbox Code Playgroud) 我有诸如role1、role2、role3等列。它们都是布尔值。
我想在此表上创建一个视图,该视图具有类型为 的角色列text[]。如果有列TRUE, FALSE, TRUE,则视图将包含["role1", "role3"].
有什么好的方法可以做到这一点,并且不会爆炸成大量的CASE WHEN\xc2\xb4s 吗?澄清一下,我可以使用 O(n) CASE WHEN,但不能使用 O(2^n) ,这是目前似乎需要的。:)
我有一个运行良好的 UPSERT 函数,但我批量更新和插入记录,可以修改此函数,以便我将所有记录作为数组传递给此函数,然后它将作为一个事务一次性插入/更新所有记录? 如果记录号 x 失败,它应该回滚撤消在 x 之前插入/更新的任何记录?这是我的 upsert 函数:
CREATE OR REPLACE FUNCTION save_weights(rec tbl_weightment)
RETURNS text AS
$BODY$
DECLARE
myoutput text :='Nothing has occured';
BEGIN
update tbl_weightment set
vname=rec.vname,
iquality=rec.iquality,
vhooks=rec.vhooks,
tstamp=rec.tstamp
vtare=rec.vtare,
vgross=rec.vgross
WHERE id=rec.id;
IF FOUND THEN
myoutput:= 'Record successfully updated';
RETURN myoutput;
END IF;
BEGIN
INSERT INTO tbl_weightment SELECT(rec).*;
myoutput:= 'Record successfully added';
END;
RETURN myoutput;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Run Code Online (Sandbox Code Playgroud)
这个功能可以修改成这样save_weights(rec tbl_weightment[])吗??任何帮助将不胜感激
为什么 PostgreSQL 使用基于 1 的数组(第一个元素位于索引 1)而不是基于 0 的数组(第一个元素位于索引 0)?
我必须更新一个bigint[]名为permissao_ver.
示例值:'{1,2,3,4,5,11,44,56,75,11}'.
伪代码:
UPDATE callcenter.pausa
SET permissao_ver = '{"(SELECT cod_grupo FROM crm.usuariosgrupos
WHERE habilitar = 1)"}'::bigint[]
WHERE habilitado = 1 AND permissao_ver is null
Run Code Online (Sandbox Code Playgroud)
我需要获取上面选择的代码将以与bigint[]列匹配的格式返回。喜欢:'{XX, XX, XX, X, XX, X}'。
我有一个名为“mkvtable”的表,它在各个字符串和字符串数组之间建立对应关系:
词| MKV字
------+-----------------
你好 | {世界,朋友}
再见| {家,永远}
你好| {伙计们,女士们}
根据PostgreSQL 提供的文档,将值附加到值数组应该是使用连接运算符“||”的简单问题。
但是,如果我尝试将字符串 , 添加到与单词 对应的there字符串数组中,则似乎不会发生任何情况:{fellas,ladies}hi
SELECT mkvword FROM mkvtable WHERE word = 'hi' || 'there';
Run Code Online (Sandbox Code Playgroud)
PostgresSQL 似乎也说了同样的话:
mkvword
---------
(0 rows)
Run Code Online (Sandbox Code Playgroud)
由于没有抛出任何错误,我认为语法上没有问题。
我究竟做错了什么?我最好的猜测是 psql 感到不安,因为我试图通过使用数组与相邻列中的值的关系来访问数组,但这只是一个未经教育的猜测。也许这种查询与连接运算符不太适合?
TL;DR:如何正确地将值连接到表行中存储的数组?
这是我当前的查询:
SELECT innings_no,
Player_Name,
sum(NoBalls) as NB
FROM (
SELECT A.innings_no,
A.bowler,
A.Runs_In_Over + ifnull(B.Extra_runs, 0) = 0 as Maiden,
A.Balls - ifnull(B.NoBalls, 0) as Balls,
A.Runs_In_Over + ifnull(B.Extra_runs, 0) as Runs,
ifnull(C.Wicket, 0) as Wickets,
Zero,
Four,
Six,
ifnull(Wides, 0) as Wides,
ifnull(NoBalls, 0) as Noballs
FROM (SELECT over_id,
ABBB.innings_no,
ABBB.bowler,
count(ABBB.ball_id) as Balls,
Sum(ABB.Runs_Scored) As 'Runs_In_Over',
SUM(if(ABB.runs_scored = 0, 1, 0)) as Zero,
SUM(if(ABB.runs_scored = 4, 1, 0)) as Four,
SUM(if(ABB.runs_scored = 6, 1, 0)) as Six
FROM …Run Code Online (Sandbox Code Playgroud)