gpt4 book ai didi

sql - sql查询以求和五列中的最少两列中的值

转载 作者:行者123 更新时间:2023-12-03 18:28:17 25 4
gpt4 key购买 nike

一个名为“ StudentResults”的数据库表存储学生的学科测试结果。并根据性能对这些测试进行评分。所以有数学分数,法语分数,英语分数,科学分数和农业分数的成绩。我想创建一个查询,该查询将检查并总结来自全部五个不同结果的两个最小结果。例如。约翰数学= 40法语= 50英语= 60科学= 30农业=70。在总共五门科目测验中,最少的两个是30和40。我该如何写一个查询来总结它们。下表示例:


|姓名|数学|法语|英文|科学|农业|
Two_Least |
-------------------------------------------------- ------------------------------------- |詹姆斯30.0
| 50.0 || 70.0
| 10.0 || 70.0 || 40.0
| |乔希10.0
| 30.0 || 40.0
| 10.0 || 70.0 || 20.0
| |詹妮特20.0
| 60.0 || 70.0
| 80.0 || 90.0 || 80.0 |



詹姆斯最少两个是数学= 30科学=10。Two_Least= 40
joshie至少两个是数学= 10科学= 10. Two_Leats = 20
珍妮特的至少两个是数学= 20法语=60。Two_Least = 80
请我怎么写一个SQL查询来解决这个问题。非常感谢大家。

最佳答案

如果您使用的是SQL ServerOracle 12c,则可以使用:

SELECT t.*, s.two_least
FROM t
CROSS APPLY (SELECT SUM(val)
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY z.val) AS rn, z.val
FROM (
SELECT t.Maths UNION ALL --FROM dual
SELECT t.French UNION ALL
SELECT t.English UNION ALL
SELECT t.Science UNION ALL
SELECT t.Agric
) z(val)
) v
WHERE rn IN (1,2)
) s(two_least);


Rextester Demo



SQLite版本(相关性应通过某种 id完成):

SELECT *, MIN(Maths, French, English, Science, Agric) + 
( SELECT Maths AS s FROM t t2 WHERE t.Name = t2.Name UNION ALL
SELECT French FROM t t2 WHERE t.Name = t2.Name UNION ALL
SELECT English FROM t t2 WHERE t.Name = t2.Name UNION ALL
SELECT Science FROM t t2 WHERE t.Name = t2.Name UNION ALL
SELECT Agric FROM t t2 WHERE t.Name = t2.Name
ORDER BY s LIMIT 1,1
) AS result
FROM t;


DBFiddle Demo

正确方法:规范您的架构。

关于sql - sql查询以求和五列中的最少两列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47437922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com