- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图理解为什么 MAX(SUM(col))
的 SQL 命令给出语法错误。我有如下两个表-:
+--------+--------+---------+-------+
| pname | rollno | address | score |
+--------+--------+---------+-------+
| A | 1 | CCU | 1234 |
| B | 2 | CCU | 2134 |
| C | 3 | MMA | 4321 |
| D | 4 | MMA | 1122 |
| E | 5 | CCU | 1212 |
+--------+--------+---------+-------+
人事表
+--------+-------+----------+
| rollno | marks | sub |
+--------+-------+----------+
| 1 | 90 | SUB1 |
| 1 | 88 | SUB2 |
| 2 | 89 | SUB1 |
| 2 | 95 | SUB2 |
| 3 | 99 | SUB1 |
| 3 | 99 | SUB2 |
| 4 | 82 | SUB1 |
| 4 | 79 | SUB2 |
| 5 | 92 | SUB1 |
| 5 | 75 | SUB2 |
+--------+-------+----------+
结果表
基本上我有一个详细信息表和一个结果表。我想找到在 SUB1
和 SUB2
组合中获得最高分的候选人的姓名和分数。基本上是总分最高的人。
我可以使用以下查询找到所有候选人的 SUB1
和 SUB2
的总和:
select p.pname, sum(r.marks) from personel p,
result r where p.rollno=r.rollno group by p.pname;
它给出以下输出:
+--------+--------------+
| pname | sum(r.marks) |
+--------+--------------+
| A | 178 |
| B | 167 |
| C | 184 |
| D | 198 |
| E | 161 |
+--------+--------------+
这很好,但我只需要输出 D | 198
因为他是最高得分手。 现在,当我像下面这样修改查询时,它会失败:
select p.pname, max(sum(r.marks)) from personel p,
result r where p.rollno=r.rollno group by p.pname;
在 MySQL 中,我得到了 Invaild Group Function
的错误。
现在搜索 SO 我确实得到了使用派生表的正确答案。我通过使用以下查询得到我的答案:
SELECT
pname, MAX(max_sum)
FROM
(SELECT
p.pname AS pname, SUM(r.marks) AS max_sum
FROM
personel p, result r
WHERE
p.rollno = r.rollno
GROUP BY p.pname) a;
但我的问题是为什么 MAX(SUM(col))
不起作用?
我不明白为什么 max 不能计算 SUM() 返回的值。现在关于 SO 的回答表明,由于 SUM() 仅返回一个值,因此 MAX() 发现计算一个值的值毫无意义,但我已经测试了以下查询-:
select max(foo) from a;
表“a”只有一行,只有一列名为 foo
,它包含一个整数值。那么,如果 MAX() 无法计算单个值,那么它是如何工作的?
有人可以向我解释查询处理器如何执行查询以及为什么我会收到无效组函数的错误吗?从可读性的角度来看,使用 MAX(SUM(col)) 是完美的,但并非如此。我想知道为什么。
MAX
和 SUM
永远不能一起使用吗?我问是因为我看到了像 MAX(COUNT(col))
这样的查询。我不明白它是如何工作的,而不是这个。
最佳答案
聚合函数需要一个参数来为组中的每一行提供一个值。其他聚合函数不会这样做。
反正也不是很有感觉。假设 MySQL 接受了 MAX(SUM(col))
——这意味着什么?那么,SUM(col)
产生相关组中所有行的 col
列的所有非 NULL
值的总和,即一个数字。您可以将它的 MAX()
设为相同的数字,但这有什么意义呢?
您使用子查询的方法是不同的,至少在原则上是这样,因为它聚合了两次。您在其中执行 SUM()
的内部聚合会为 p.pname
的每个值计算单独的总和。然后外部查询计算子查询返回的所有行的最大值(因为您没有在外部查询中指定 GROUP BY
)。如果这是您想要的,那就是您需要指定的方式。
关于mysql - sql - 为什么 SUM() 的 MAX() 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29040466/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!