sql修改数据怎么加减分数或百分比及不超过或不低于多少

SQL怎么把某个学号所有成绩都加10,最大不超过100,或减10最低不低于60,或是男生加10% 女生加10分

UPDATE student  
SET score = score + 10  
WHERE student_id IN (  
  SELECT student_id  
  FROM scores  
  WHERE student_id = '学号'  
  GROUP BY student_id  
  HAVING SUM(score) <= 100 OR score < 60  
);

在上面的语句中,使用了一个子查询来查找符合条件的学号。然后 将这些学号的成绩都加上 10。最后,使用了一个逻辑 AND 语句来限制成绩不能超过 100 或者不低于 60。

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7481443
  • 你也可以参考下这篇文章:sql给已有数据中的表添加字段并且填充不同的数据
  • 除此之外, 这篇博客: SQL对两个字段分组后,分组内原来的顺序被打乱了怎么办?中的 这是一个开头 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 今天领导给了一个任务,数据库表里有人员的基本信息,以及每个人身上的标签,每个人有一个或多个标签,每个标签也有分类,一级分类、二级分类。本来在数据库里的结构是这样的:

    姓名(name)标签(label)标签分类(label_type)
    张三标签a二级分类1
    张三标签a一级分类2
    张三标签b三级分类4
    张三标签b二级分类1
    张三标签b一级分类3
    李四标签c二级分类3
    李四标签c一级分类3

    需要得到下面结构的结果

    姓名(name)标签(label)标签分类(label_type)
    张三标签a二级分类1/一级分类2
    张三标签b三级分类4/二级分类1/一级分类3
    李四标签c二级分类3/一级分类3

    于是开始写sql (这里用的postgresSQL)
    select max(name) as name,max(label) as label,string_agg(label_type,’/’) from table group by name,label

    执行后发现结果跟我想象的不一样,对两个字段用group by分组后,分组内label_type字段原本的顺序被打乱了,结果像这样

    姓名(name)标签(label)标签分类(label_type)
    张三标签a一级分类2/二级分类1
    张三标签b二级分类1/三级分类4/一级分类3
    李四标签c二级分类3/一级分类3

    导致拼接出来的字段分类级别顺序错乱了。

    解决办法:
    用姓名+标签拼接出来的新字段进行分组,sql如下:
    select max(name) as name,max(label) as label,string_agg(label_type,’/’) from table group by contact_ws(name,label)

    问题就解决啦!

  • 您还可以看一下 刘海龙老师的sql注入视频教程课程中的 数字型与字符串型的注入小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以提供如下解决方案:

    针对加减分数操作,可以使用 SQL 中的 UPDATE 语句:假设要将某个字段的值加上 10 分,可以使用如下语句:

    UPDATE table_name SET field_name = field_name + 10 WHERE condition;
    

    其中 table_name 为表名,field_name 为字段名,condition 为筛选条件。如果要将某个字段的值加上 10%,可以先查询出原始值,再进行计算,如下:

    UPDATE table_name SET field_name = original_value * 1.1 WHERE condition;
    

    其中 original_value 为原始值,查询语句如下:

    SELECT field_name AS original_value FROM table_name WHERE condition;
    

    针对限制结果不超过或不低于特定数值,可以使用 SQL 中的 CASE WHEN 语句,如下:

    UPDATE table_name SET field_name = 
    CASE 
        WHEN field_name + 10 > 90 THEN 90 -- 限制不超过90
        WHEN field_name + 10 < 60 THEN 60 -- 限制不低于60
        ELSE field_name + 10
    END 
    WHERE condition;
    

    其中 field_name 为字段名,10 为要加上的分数。根据情况修改限制条件即可。

    需要注意的是,如果在该字段上存在索引,可能会影响性能。可以使用 EXPLAIN 命令来查看执行计划,根据情况优化索引。