SQL查询帮助:如何根据同一查询中的某些条件计算value/max(value)

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

不是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 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ரதீப் : 添加了预期结果的详细信息。但它是一个单列表。查询的方式很奇怪,因为我有很多表,需要以这种方式连接。无论如何,添加子查询已经解决了问题,但条件比您的查询多一点。谢谢你的提示。