SQL查询帮助:如何根据同一查询中的某些条件计算value/max(value)
不是SQL方面的专家。我正在使用带有EF迁移的postgres数据库。坚持这个要求。来了 我的桌子是这样的:SQL查询帮助:如何根据同一查询中的某些条件计算value/max(value),sql,postgresql,Sql,Postgresql,不是SQL方面的专家。我正在使用带有EF迁移的postgres数据库。坚持这个要求。来了 我的桌子是这样的: A B C D 20 1 1 1 59 0 0 1 57 1 1 1 10 1 0 0 30 1 1 1 15 0 0 0 行的顺序从最早到最晚从上到下 我对我的项目有一半的疑问如下: SELECT dcr."A" FROM "DCR" dcr LEFT JOIN "DCM" dcm
A B C D
20 1 1 1
59 0 0 1
57 1 1 1
10 1 0 0
30 1 1 1
15 0 0 0
行的顺序从最早到最晚从上到下
我对我的项目有一半的疑问如下:
SELECT dcr."A"
FROM "DCR" dcr
LEFT JOIN "DCM" dcm ON "Id" = dcm."DCRID"
LEFT JOIN "DC" dc ON dc."Id" = dcm."DCID"
WHERE dcr."B" != 0
AND dcr."C" != 0
AND dcr."B" != 0
ORDER BY "UtcDate" desc
limit(1)
当匹配条件时,这将获取最新A的第一部分值。但不是下面解释的最大部分和分割部分
我想找到最新的A的结果,其中B=C=D=1除以其前几行中A的最大值,其中B=C=D=1-1*100
我希望这种情况发生在单个查询中,并且有多个类似这样的组。假设该表包含大约60行,我们可以根据其他列对它们进行分组。每组应评估上述公式
上述示例的预期结果应为:
result = ((30 / 57) - 1) * 100 = (0.5263 - 1) * 100 = -47.73
您可以使用子查询来获取最大值。我不知道为什么要以这种奇怪的方式编写查询,但我会保留它:
SELECT dcr."A" / (SELECT MAX("A")
FROM "DCR"
WHERE dcr."B" != 0
AND dcr."C" != 0
AND dcr."D" != 0)) - 1) * 100
FROM "DCR" dcr
LEFT JOIN "DCM" dcm ON "Id" = dcm."DCRID"
LEFT JOIN "DC" dc ON dc."Id" = dcm."DCID"
WHERE dcr."B" != 0
AND dcr."C" != 0
AND dcr."D" != 0
ORDER BY "UtcDate" desc
limit(1)
也许是这样的?
从中选择t1.A/maxt2.A*100
选择行号作为id,*
从t
式中,t.A=1,t.B=1,t.C=1为t1
参加
选择行号作为id,*
从t
式中,t.A=1,t.B=1,t.C=1为t2
关于t1.id>t2.id
按t1.A,t1.E分组
@vinmm-您的问题中缺少两件事。1.添加到目前为止您尝试过的查询。2.您已经对您的问题添加了足够的解释,添加预期结果格式将更好地理解Tanks@Pரதீப் 对于建议,我指的是表中的预期结果format@Pரதீப் : 添加了预期结果的详细信息。但它是一个单列表。查询的方式很奇怪,因为我有很多表,需要以这种方式连接。无论如何,添加子查询已经解决了问题,但条件比您的查询多一点。谢谢你的提示。