我想在我的数据库中添加不同三个表的总分,并找到分数小于80的学生人数。所以我这样做了:
SELECT
(SELECT SUM((totalmarks / 30) * 5) AS marks1 FROM marks) +
(SELECT SUM((totalmarks / 25) * 5) AS marks2 FROM marks2) +
(SELECT SUM((totalmarks / 15) * 5) AS marks3 FROM marks3) AS result
HAVING COUNT((result / 300) * 50) < 80
我能够得到标记的总和,但是当我放置HAVING COUNT
条件时,它什么也没有显示。有人可以告诉我如何使用COUNT
获得学生人数吗?
显示错误:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近'HAVING COUNT((结果/ 300)* 50)&gt; 80'在第11行。
感谢有人可以帮助我。
答案 0 :(得分:1)
您需要按学生对结果进行分组:
select studID, sum(result) * 5 as result
from (
select studID, totalmarks / 30 as result from marks1
union all
select studID, totalmarks / 25 as result from marks2
union all
select studID, totalmarks / 15 as result from marks3
) as base
group by studID
having ((result / 300) * 50) < 80
注意:你如何划分和乘法有点奇怪。例如,为什么不等效:
having result < 480
如果逻辑是marks1
中的最高得分为30,对于marks2
25和marks3
15,并且您希望给予三者中的每一个相等的权重,那么你确实必须像你一样划分totalmarks
中的每一个。
乘以5后,这意味着结果永远不会超过5。
因此,having
测试非常多余:所有结果都将低于480。
所以也许你想看看谁没有完美的分数,那么having
条款应该是:
having result < 5
答案 1 :(得分:0)
使用您当前的查询,它需要一个参考表/容器来评估HAVING
条件..所以,这是我建议的解决方案:
SELECT result
FROM (
SELECT (
SELECT SUM(( totalmarks/30 )*5) AS marks1
FROM marks
) + (
SELECT SUM(( totalmarks/25 )*5) AS marks2
FROM marks2
) + (
SELECT SUM(( totalmarks/15 )*5) AS marks3
FROM marks3
) AS `result`
) AS `derived`
HAVING COUNT((result / 300) * 50) < 80