1
CREATE TABLE IF NOT EXISTS `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ia_att` decimal(3,2) NULL,
  `t1` decimal(3,2) NULL,
  `t2` decimal(3,2) NULL,
  `t3` decimal(3,2) NULL,
  `ia_tot` decimal(3,2) NULL,
  .....
  .....
  PRIMARY KEY (`id`),
);   

在上表中有更多的列,但我固定在计算这些列,我需要的计算是,

  • 如果 ia_att 列大于 >95,则 value = 5 ;
  • 如果 >80 <95,则 value = 4;
  • 如果 >75 <80 则值 = 3;
  • 如果 >60 <75,则 value = 2; - 如果小于 60,则值 = 0;

我必须从 t1、t2、t3 三个列中取 2 个最佳值。并将这两个大值相加并除以“2”。并添加来自 ia_att 的值,结果应放在 ia_tot 列中。“每次新条目进入这些列时,上述所有计算都应该发生。”
例子考虑到

ia_att = 72
t1 = 18
t2 = 15
t3 = 20
然后 {[(18 + 20)/2] + 2} = 21;

18 和 20 是来自 t1 ,t2 ,t3 的两个大值 2 来自 ia_att。

PLZ帮助我在mysql中进行上述计算。

4

1 回答 1

1

您的触发器可能看起来像

CREATE TRIGGER tg_bi_test
BEFORE INSERT ON test
FOR EACH ROW
  SET NEW.ia_tot = 
     (NEW.t1 + NEW.t2 + NEW.t3 -
      LEAST(NEW.t1, NEW.t2, NEW.t3)) / 2 + 
     CASE 
       WHEN NEW.ia_att > 95 THEN 5
       WHEN NEW.ia_att BETWEEN 81 AND 95 THEN 4
       WHEN NEW.ia_att BETWEEN 76 AND 80 THEN 3
       WHEN NEW.ia_att BETWEEN 61 AND 75 THEN 2
       WHEN NEW.ia_att < 60 THEN 2
     END;

发行结果

INSERT INTO test (ia_att, t1, t2, t3) VALUES (72, 18, 15, 20);

将会

| 身份证 | IA_ATT | T1 | T2 | T3 | IA_TOT |
|----|--------|----|----|----|--------|
| 1 | 72 | 18 | 15 | 20 | 21 |

这是SQLFiddle演示

于 2013-09-15T09:23:41.843 回答