SELECT TestID, Grade FROM tests_points;
返回:
+--------+-------+
| TestID | Grade |
+--------+-------+
| 10 | 125 |
| 11 | 110 |
| 12 | 100 |
| 13 | 75 |
| 14 | 50 |
| 15 | 65 |
| 16 | 70 |
| 17 | 100 |
| 18 | 100 |
+--------+-------+
但是,测试ID 17和18是“奖金测试”,所以我需要用这两个替换两个较低的等级,并返回所有等级的SUM。
那么,我如何通过testID 17和18等级“替换”两个较低等级(来自TestID 14和15)。
“正确的成绩列表”将是:
+--------+-------+
| TestID | Grade |
+--------+-------+
| 10 | 125 |
| 11 | 110 |
| 12 | 100 |
| 13 | 75 |
| 14 | 100|
| 15 | 100|
| 16 | 70 |
+--------+-------+
最后我只需要所有等级的SUM,修正低等级。 SELECT SUM(等级)FROM tests_points;
我该怎么做?
答案 0 :(得分:0)
以下查询可能会得到你想要的......
SELECT ttal-garba FROM
(SELECT sum(c.grade) as garba FROM (SELECT * from tests_points where testid < 17 order by grade asc limit 2) as c) as a,
(SELECT sum(grade) as ttal FROM tests_points) as b
(我知道......硬编码一切都很糟糕......)
答案 1 :(得分:0)
这就是你所需要的!
select testID, GREATEST(
IF(
grade = (select min(grade) from test_points),(select grade from test_points where testID = 17),
grade)
,
IF(grade = (select min(grade) from test_points WHERE grade > ( SELECT min(grade) FROM test_points))
,(select grade from test_points where testID = 18),
grade)) as Score
from test_points
where testID not in(17, 18)
答案 2 :(得分:0)
如果您只想尝试将除了底部两个以外的所有值相加,那么您可以做一些喜欢的事情,就这样。
首先添加一个新字段,让我们说test_type:
更新test_points SET test_type ='test';
现在我们可以通过总和选择使用组。例如
SELECT test_type, (SUM(Grade) OVER (ORDER BY Grade DESC))
FROM test_Points
LIMIT 7;
这将返回所有值的总和,但它将显示7列。如果你只需要总计,将一个组扔进混合,它会将其缩小到一个字段,或者只选择第7行。