【问题标题】:How do I check if the sum of values of 2 columns is greater than a number and update table如何检查 2 列的值之和是否大于数字并更新表
【发布时间】:2017-09-20 11:55:12
【问题描述】:
    CREATE TABLE candidate_subjects
    (
    id INT(10) PRIMARY KEY NOT NULL AUTO_INCREMENT,
    candidate_id INT(11),
    exam_type_id INT(10),
    subject_id INT(10),
    ca_score INT(11),
    exam_score INT(6),
    score_grade VARCHAR(10),
    date_created VARCHAR(10),
    date_modified TIMESTAMP
    );

    INSERT INTO `candidate_subjects` (`id`, `candidate_id`, `exam_type_id`, 
    `subject_id`, `ca_score`, `exam_score`, `score_grade`, `date_created`, 
    `date_modified`) VALUES
    (1, 2, 1, 32, 22, 61, NULL, '2017-02-01', '2017-08-28 13:10:33'),
    (2, 2, 1, 5, 21, 38, NULL, '2017-02-01', '2017-08-28 13:10:33'),
    (3, 2, 1, 14, 21, 51, NULL, '2017-02-01', '2017-08-28 13:10:33'),
    (4, 2, 1, 1, 19, 34, NULL, '2017-02-01', '2017-08-28 13:10:33'),
    (5, 2, 1, 2, 23, 39, NULL, '2017-02-01', '2017-08-28 13:10:33'),
    (6, 2, 1, 38, 20, 32, NULL, '2017-02-01', '2017-08-28 13:10:33'),
    (7, 2, 1, 53, 24, 47, NULL, '2017-02-01', '2017-08-28 13:10:33'),
    (8, 4, 1, 32, 19, 61, NULL, '2017-02-01', '2017-08-28 13:11:27'),
    (9, 4, 1, 5, 22, 41, NULL, '2017-02-01', '2017-08-28 13:11:27'),
    (10, 4, 1, 14, 20, 46, NULL, '2017-02-01', '2017-08-28 13:11:27'),
    (11, 4, 1, 1, 23, 37, NULL, '2017-02-01', '2017-08-28 13:11:27'),
    (12, 4, 1, 2, 21, 36, NULL, '2017-02-01', '2017-08-28 13:11:27'),
    (13, 4, 1, 38, 22, 34, NULL, '2017-02-01', '2017-08-28 13:11:27'),
    (14, 4, 1, 53, 24, 52, NULL, '2017-02-01', '2017-08-28 13:11:27'),
    (15, 5, 1, 32, 20, 62, NULL, '2017-02-01', '2017-08-28 13:11:44'),
    (16, 5, 1, 5, 22, 38, NULL, '2017-02-01', '2017-08-28 13:11:44’);


    CREATE TABLE candidates
    (
    id INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
    exam_no VARCHAR(15),
    surname VARCHAR(50),
    other_names VARCHAR(100),
    school_id INT(11),
    registration_completed INT(11),
    exam_scores_completed INT(5),
    remark VARCHAR(10)
    );

插入candidatesidexam_nosurnameother_namesschool_idregistration_completedexam_scores_completedremark)值 (1, '1171052001', 'ABADO', 'MASENENGEN', 1052, 1, '1', ''), (2, '1170938001', 'AGBA', 'NGUHER', 938, 1, '1', ''), (3, '1170071001', 'ABEE', 'SESUUR', 71, 1, '1', ''), (4, '1170938002', 'AHEN', 'REBECCA DOOSUUN', 938, 1, '1', ''),

上面的两张表是candidate和candidate_subjects,分别用于存储候选人详情和候选人分数。 如果候选人通过的科目少于 6 个,我想要一个查询以将候选人的评论更新为“失败”。要通过一门学科,考生的 ca_score 和 Exam_score 之和必须大于 40。 下面是我写的查询,但它没有给出预期的结果。

    UPDATE candidates SET candidates.remark='FAIL' WHERE (select 
    count(candidate_subjects.id) AS total_pass from candidates, 
    candidate_subjects where candidates.id=candidate_subjects.candidate_id 
    and (candidate_subjects.ca_score + candidate_subjects.exam_score) >= 40) < 6

【问题讨论】:

  • 将您的代码格式化为可读
  • 也为候选表提供样本数据
  • @MKhalidJunaid 提供的候选人表样本数据

标签: php mysql


【解决方案1】:
UPDATE candidates 
SET candidates.remark='FAIL' 
WHERE id IN
(

    select candidates.id
    from candidates AS c
    INNER JOIN candidate_subjects AS s ON c.id = s.candidate_id 
    WHERE (s.ca_score + s.exam_score) >= 40
    GROUP BY c.id
    HAVING COUNT(s.id) < 6
)
  • where 子句中带有group by 候选ID 的子查询将为您提供分数大于40 的候选。
  • 然后having 将删除除主题少于六个主题的行之外的所有行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 2023-03-07
    • 2023-01-16
    • 1970-01-01
    • 2017-07-25
    • 2017-10-23
    • 2023-03-24
    相关资源
    最近更新 更多