SQL面接問題(16)

1965 ワード

問題:
    既存の表billと表paymentの構造は以下の通りです。二つの表はpay_を通ります。id関連:       ビルの時計――ビルIDは請求書の表示、chargeは請求書の金額、pay_です。idは支払番号で、PK:bill_id。       ビルid INTEGER       charge INTEGER       pay_id INTEGER       payment表――pay_idは支払番号で、chargeは支払金額で、PK:pay_id
       pay_id INTEGER       charge INTEGER    paymentの更新を要求します。charge=bill表の同じpay_idのchargeの和。
建設表:
DROP TABLE IF EXISTS `bill`;
CREATE TABLE `bill` (
  `Id` int(11) NOT NULL auto_increment,
  `billid` int(11) default NULL,
  `charge` int(11) default NULL,
  `payid` int(11) default NULL,
  PRIMARY KEY  (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `bill` VALUES (1,1,100,2);
INSERT INTO `bill` VALUES (2,2,200,1);
INSERT INTO `bill` VALUES (3,3,223,2);
INSERT INTO `bill` VALUES (4,4,344,3);
INSERT INTO `bill` VALUES (5,5,55,4);
INSERT INTO `bill` VALUES (6,6,66,2);
INSERT INTO `bill` VALUES (7,7,77,1);
INSERT INTO `bill` VALUES (8,8,81,1);
INSERT INTO `bill` VALUES (9,9,88,3);
INSERT INTO `bill` VALUES (10,10,112,3);

DROP TABLE IF EXISTS `payment`;
CREATE TABLE `payment` (
  `Id` int(11) NOT NULL auto_increment,
  `payid` int(11) default NULL,
  `charge` int(11) default NULL,
  PRIMARY KEY  (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `payment` VALUES (1,1,358);
INSERT INTO `payment` VALUES (2,2,389);
INSERT INTO `payment` VALUES (3,3,544);
INSERT INTO `payment` VALUES (4,4,55);
INSERT INTO `payment` VALUES (5,5,NULL);
INSERT INTO `payment` VALUES (6,6,NULL);
 
SQL:
UPDATE payment SET charge = 
(SELECT SUM(charge) AS charge FROM bill WHERE bill.payid = payment.payid GROUP BY payid);
 
 
Order Byモードを紹介します。
SELECT * FROM bill ORDER BY CASE WHEN(Id > 5) THEN charge ELSE payid END;