我有一张学生记分卡表。这是表格,
subject | mark1 | mark2 | mark3 |......|markn
stud1 | 99 | 87 | 92 | | 46
stud2 |....................................
.
.
studn |....................................|
现在,我需要对每个学生的总分求和。我通过使用< code>sum(mark1 mark2...markn)按stud分组。我想知道如何在不添加每个列名的情况下对其求和,如果达到marks26,这将是巨大的。有人知道如何修理它吗?提前感谢。
如果您的任何markn
列都是“AllowNull”,那么您需要做一些额外的事情来确保返回正确的结果,这是因为1个NULL值将导致NULL总数。
这是我认为正确的答案。
SUM(IFNULL(`mark1`, 0) + IFNULL(`mark2`, 0) + IFNULL(`mark3`, 0)) AS `total_marks`
如果第一个参数为空,则IFNULL将返回第二个参数。可以使用COALESCE,但是我更喜欢在需要的时候才使用它。看看mysql中ifnull和coalesce的区别是什么?
对整个计算进行 SUM 处理比单独对每列进行 SUM 计算更整洁。
SELECT `student`, SUM(IFNULL(`mark1`, 0) + IFNULL(`mark2`, 0) + IFNULL(`mark3`, 0)) AS `total_marks`
FROM student_scorecard
GROUP BY `student`
我想知道如何在不添加每个列名的情况下求和,如果达到标记26,那将是巨大的。
要在sql中动态生成并执行该语句,您需要使用INFORMATION_SCHEMA。COLUMNS表来创建查询字符串,然后使用保存在变量中的准备好的语句来执行它。
SELECT CONCAT('SELECT `student`, SUM(IFNULL(`', group_concat(`COLUMN_NAME` SEPARATOR '`, 0) + IFNULL(`'), '`, 0) AS `total_marks` FROM `student_scorecard` GROUP BY `student`')
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA` = (select DATABASE())
AND `TABLE_NAME` = 'student_scorecard'
AND `COLUMN_NAME` LIKE 'mark%'
# adapted from https://stackoverflow.com/a/22369767/2273611
# insert statement sql into a variable
INTO @statement_var;
#prepare the statement string
PREPARE stmt_name FROM @statement_var;
#execute the prepared statement/query
EXECUTE stmt_name;
# release statement
DEALLOCATE PREPARE stmt_name;
另一种方法是生成select查询。玩这把小提琴。
SELECT CONCAT('SELECT ', group_concat(`COLUMN_NAME` SEPARATOR '+'), ' FROM scorecard')
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA` = (select database())
AND `TABLE_NAME` = 'scorecard'
AND `COLUMN_NAME` LIKE 'mark%';
上面的查询将生成另一个查询,该查询将为您执行选择。
样本结果:
SELECT mark1+mark2+mark3 FROM scorecard
您不必再手动添加所有列。
SELECT student, (SUM(mark1)+SUM(mark2)+SUM(mark3)....+SUM(markn)) AS Total
FROM your_table
GROUP BY student
问题内容: 我正在建立一个可能有70列以上的表格。我现在正在考虑将其拆分,因为每次访问表时都不需要列中的某些数据。再说一次,如果我这样做,我就不得不使用联接。 在什么时候(如果有的话)是否认为列太多? 问题答案: 一旦超过数据库支持的最大限制,就认为它太多了。 不需要每个查询都返回所有列的事实是完全正常的;这就是为什么SELECT语句可让您显式命名所需的列的原因。 通常,您的表结构应反映您的域模型
问题内容: 我正在尝试在JPA 2.0(JBoss 7.1.1)中建立一个ManyToMany关系,并在该关系中增加一列(下面的粗体字),例如: 我不想有重复的属性,因此我想应用http://giannigar.wordpress.com/2009/09/04/mapping-a-many-to- many-join-table中 提供的第二种解决方案与额外的列一起使用jpa / 。但是我无法正常
问题内容: 我的数据库包含3个表:User和Service实体具有多对多关系,并与SERVICE_USER表联接在一起,如下所示: 用户-SERVICE_USER-服务 SERVICE_USER表包含附加的BLOCKED列。 执行这种映射的最佳方法是什么?这些是我的实体类 我遵循以下示例http://giannigar.wordpress.com/2009/09/04/m … using-jpa
问题内容: 我有一个班级用户。用户可以与许多其他用户成为朋友。这种关系是相互的。如果A是B的朋友,那么B是A的朋友。我也希望每个关系都存储其他数据,例如两个用户成为朋友的日期。因此,这是同一表上具有多列的多对多关系。我知道应该创建一个中产阶级友谊(包含两个用户ID和日期列)。但是我在将其与Hibernate映射时做得不够。使我停滞不前的是映射到了同一张表。如果多对多关系是在两个不同的表之间,则可以
如何用额外的列保存多对多映射对象?专列为“审批”。对于多对多注释,我只调用了setUsersDocuments(users),它工作正常...我怎样才能使它工作与额外的列? 文件 用户类 主键 多对多表 正在保存单据 编辑:unsuccessfull保存对象-Document.GetDocumentsForUsers().Add(userDocuments)null. 编辑:错误 null
CSS3 多列再需要设计多个布局时是非常有用的。比如,报纸布局。 主要属性如下: column-count : 指定元素的列数 column-rule : 设置列之间的宽度,样式和颜色 column-gap : 指定的列之间的差距 例子: .newspaper { column-count: 3; -moz-column-count: 3; /* Firefox */ -w
问题内容: 我有一个包含 产品* 列表的表 订单 。对于与特定订单相对应的每个 产品 ,我需要存储一个 地址 列表,在该 地址 中应将单个产品(每个订单基于每个产品)发送到 * 所以我有这张表,在 订单 和 产品 上有很多很多,我需要的是将上表中的每个条目映射到 地址 列表。所以我需要像 并将上表中的条目映射到地址列表,我需要上述PK和地址ID(我的地址表的主键)上的多对多表 这里PK_Order
问题内容: 我在MySQL数据库中有下表: SQL将如下所示: 如您所见,我同时创建了primaryId和和imgDate索引键。我的想法是,该WHERE子句使用primaryId,而ORDER子句使用来查询结果imgDate。 我的问题是,现在使用多索引会更好吗?还是我应该使用多列索引(目前我不太了解)? 这是我从EXPLAIN得到的: 注意:这不是使用多列索引,这是使用上表说明的结果。 问题答