作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一个名为“ 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 Server
或Oracle 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);
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;
关于sql - sql查询以求和五列中的最少两列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47437922/
我是一名优秀的程序员,十分优秀!