สอบถามเกี่ยวกับ SQL หาจำนวนงานของพนักงาน 4 คนครับ ต้องเขียนยังไงให้ได้รูปแบบนี้
จากรูป ในฐานข้อมูลมีพนักงาน 4 คน อยากรู้ว่าจะเขียน SQL คำนวณว่าแต่ละคนมีจำนวนงานเท่าไหร่ครับ
เงื่อนไขคือ
- ถ้า job_type เป็น 6 ให้นับเป็นแค่ 1 งานของพนักงานคนนั้น ไม่ว่าจะมีกี่เรคคอร์ดก็ตาม
- ถ้า job_type เป็น 2 นับทุกเรคคอร์ด
แล้วเอาค่าที่ได้จาก job_type ทั้ง 2 มาบวกกัน เอาคนที่ได้เยอะสุดแค่ 3 คน อยากรู้ว่าจะเขียน SQL ยังไงให้ได้ตามกรอบสีส้ม
ฐานข้อมูลครับ
-- phpMyAdmin SQL Dump
-- version 2.10.3
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Mar 12, 2014 at 01:12 PM
-- Server version: 5.0.51
-- PHP Version: 5.2.6
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `test`
--
-- --------------------------------------------------------
--
-- Table structure for table `job`
--
CREATE TABLE `job` (
`id` int(11) NOT NULL auto_increment,
`job_emp` varchar(4) NOT NULL,
`customer` varchar(3) NOT NULL,
`job_type` varchar(2) NOT NULL,
`job_date` datetime NOT NULL,
`job_detail` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=17 ;
--
-- Dumping data for table `job`
--
INSERT INTO `job` VALUES (1, 'emp1', '001', '2', '2014-03-01 16:23:12', 'gjhfghguy');
INSERT INTO `job` VALUES (2, 'emp2', '004', '2', '2014-03-01 16:23:36', 'hrtdrch');
INSERT INTO `job` VALUES (3, 'emp1', '001', '6', '2014-03-01 16:24:21', 'gjftft');
INSERT INTO `job` VALUES (4, 'emp4', '002', '2', '2014-03-02 16:24:38', '');
INSERT INTO `job` VALUES (5, 'emp1', '002', '2', '2014-03-03 16:25:41', '');
INSERT INTO `job` VALUES (6, 'emp2', '003', '6', '2014-03-03 16:25:49', '');
INSERT INTO `job` VALUES (7, 'emp3', '002', '2', '2014-03-03 16:25:41', '');
INSERT INTO `job` VALUES (8, 'emp1', '002', '2', '2014-03-03 16:25:49', '');
INSERT INTO `job` VALUES (9, 'emp4', '001', '2', '2014-03-03 16:25:41', '');
INSERT INTO `job` VALUES (10, 'emp2', '003', '6', '2014-03-03 16:25:49', '');
INSERT INTO `job` VALUES (11, 'emp3', '002', '6', '2014-03-04 16:27:12', '');
INSERT INTO `job` VALUES (12, 'emp1', '004', '2', '2014-03-05 16:27:23', '');
INSERT INTO `job` VALUES (13, 'emp4', '004', '6', '2014-03-04 16:27:12', '');
INSERT INTO `job` VALUES (14, 'emp3', '001', '2', '2014-03-05 16:27:23', '');
INSERT INTO `job` VALUES (15, 'emp4', '001', '2', '2014-03-04 16:27:12', '');
INSERT INTO `job` VALUES (16, 'emp4', '001', '2', '2014-03-05 16:27:23', '');
Tag : PHP, MySQL
Date :
2014-03-12 13:23:58
By :
giverplus
View :
1183
Reply :
4
Code (SQL)
SELECT `job_emp`, SUM(`cnt2`) AS 'job_type 2', SUM(`cnt6`) AS 'job_type 6', SUM(`cnt2`)+SUM(`cnt6`) AS 'type2+type6' FROM (SELECT `job_emp`,`job_type`,IF(`job_type`= 6, 1, 0) AS 'cnt6', IF(`job_type`=2, ขอลบออก ให้ลองคิดดูว่ามันควรเป็นอะไร, 0) AS 'ขอลบออก ให้ลองคิดดูว่ามันควรเป็นอะไร' FROM `job` GROUP BY `job_emp`,`job_type`) AS `c` GROUP BY `job_emp` ORDER BY `type2+type6` DESC LIMIT 0,3
U0VMRUNUIGBqb2JfZW1wYCwgU1VNKGBjbnQyYCkgQVMgJ2pvYl90eXBlIDInLCBTVU0oY
GNudDZgKSBBUyAnam9iX3R5cGUgNicsIFNVTShgY250MmApK1NVTShgY250NmA
pIEFTICd0eXBlMit0eXBlNicgRlJPTSAoU0VMRUNUIGBqb2JfZW1wYCxgam9iX3R5cGVgLElGKGBqb2JfdHlwZWA
9IDYsIDEsIDApIEFTICdjbnQ2JywgSUYoYGpvYl90eXBlYD0yLCBDT1VO
VCgqKSwgMCkgQVMgJ2NudDInIEZST00gYGpvYmAgR1JPVVAgQlkgIGBqb2JfZW1wYCxgam9iX3R5cGVg
KSBBUyBgY2AgR1JPVVAgQlkgYGpvYl9lbXBgIE9SREVSIEJZIGB0eXBlMit0e
XBlNmAgREVTQyBMSU1JVCAwLDM=
ประวัติการแก้ไข 2014-03-12 13:54:17 2014-03-12 13:54:36 2014-03-12 13:55:18 2014-03-12 13:56:30 2014-03-12 13:57:10 2014-03-12 13:57:36
Date :
2014-03-12 13:52:10
By :
itpcc
Code (SQL)
SELECT `job_emp`, SUM(`cnt2`) AS 'job_type 2', SUM(`cnt6`) AS 'job_type 6', SUM(`cnt2`)+SUM(`cnt6`) AS 'type2+type6'
FROM (SELECT `job_emp`,`job_type`,IF(`job_type`= 6, 1, 0) AS 'cnt6', IF(`job_type`=2, 1, 0) AS 'cnt2' FROM `job` GROUP BY `job_emp`,`job_type`) AS `c` GROUP BY `job_emp` ORDER BY `type2+type6` DESC LIMIT 0,3
มันได้ผลลัพธ์แบบนี้ครับ ไม่เข้าใจ IF() ตัวเลข 2 หลักหลังคืออะไรครับ
Date :
2014-03-12 14:38:26
By :
giverplus
IF(เงื่อนไข, ค่าที่ได้เมื่อจริง, ค่าที่ได้เมื่อไม่จริง)
เฉลยฮะ
Date :
2014-03-12 15:38:54
By :
itpcc
ขอบคุณครับ ได้ล่ะๆ
Date :
2014-03-12 15:46:33
By :
giverplus
Load balance : Server 03