我有桌子 user_completed
CREATE TABLE IF NOT EXISTS `user_completed` (
`rowId` int(10) unsigned NOT NULL AUTO_INCREMENT,
`designer_id` int(10) unsigned NOT NULL,
`status` varchar(54) DEFAULT NULL,
PRIMARY KEY (`rowId`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
INSERT INTO `user_completed` (`rowId`, `designer_id`, `status`) VALUES
(1, 1, accept),
(2, 1, reject),
(3, 1, accept),
(4, 1, reject),
(5, 1, overtime),
(6, 2, accept)
(7, 2, accept)
(8, 3, accept)
(9, 2, reject);
Run Code Online (Sandbox Code Playgroud)
看起来像:
rowId designer_id status
1 1 accept
2 1 reject
3 1 accept
4 1 reject
5 1 overtime
6 2 accept
7 2 accept
8 3 accept
9 2 reject
Run Code Online (Sandbox Code Playgroud)
我想得到以下结果:
designer_id accept overtime reject
1 2 1 2
2 2 0 1
3 1 0 0
Run Code Online (Sandbox Code Playgroud)
但我不知道如何分组designer_id然后计数不同status,每个分成如上所述的列.
Vig*_*r A 10
试试这个
SELECT designer_id,
SUM(IF(status = 'accept',1,0)) as 'Accept',
SUM(IF(status = 'reject',1,0)) as 'Reject',
SUM(IF(status = 'overtime',1,0)) as 'Overtime'
FROM
user_completed
Group By designer_id
Run Code Online (Sandbox Code Playgroud)
正如杰克所说,这简直就是这样
SELECT designer_id,
SUM(status = 'accept') as 'Accept',
SUM(status = 'reject') as 'Reject',
SUM(status = 'overtime') as 'Overtime'
FROM
user_completed
Group By designer_id
Run Code Online (Sandbox Code Playgroud)