[SQL]一道简单的sql题,某软开的笔试

CREATE TABLE `department`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `total_person_count` int(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of department
-- ----------------------------
INSERT INTO `department` VALUES (1, '科技', 3);
INSERT INTO `department` VALUES (2, '算法', 2);
INSERT INTO `department` VALUES (3, '运营', 2);
INSERT INTO `department` VALUES (4, '管理', 1);

表一 id name 和 total_person_count

CREATE TABLE `person`  (
  `id` int(0) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `d_id` int(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

表二 id name 和d_id

题目1:

展示

部门名   人员总数

科技    3
算法    2
运营    2
管理    1

但是当时人员总是是空的,需要联查。

SELECT d.`name` as 部门名, p.num as n from `department` d JOIN (SELECT count(*) as num, d_id  FROM `person` GROUP BY  d_id) p on d.id = p.d_id

 

更新第一个第一个部门表每个部门的总人数:

UPDATE  `department` d SET d.total_person_count = (SELECT COUNT(1) FROM `person` p WHERE p.d_id = d.id)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值