如何在mysql中按名称分组和条件过滤

6rqinv9w  于 2023-04-19  发布在  Mysql
关注(0)|答案(1)|浏览(93)

我有数据表,我想得到datain的基础上日期之间,catagory和组由部分id,我发现问题时,值part_id相同
tblpart
| 零件ID|范畴|ok|ng|总计|约会|
| --------------|--------------|--------------|--------------|--------------|--------------|
| 第一部分|规则的|五|1|六|2023-01-02 2023-01-02|
| 第二部分|装配前|四|0|四|2023-01-03 2023-01-03|
| 第三部分|装配前|五|五|10个|2023-01-03 2023-01-03|
| 第四部分|纽帕特|五|0|五|2023-01-04 2023-01-04|
| 第五部分|纽帕特|五|0|五|2023-01-02 2023-01-02|
| 第六部分|纽帕特|五|0|五|2023-01-04 2023-01-04|
| 第七部分|规则的|五|0|五|2023-01-05 2023-01-05 2023-01-05|
| 第八部分|装配前|五|0|五|2023-01-06 2023-01-06|
| 第九部分|装配前|五|0|五|2023-01-08 2023-01-08|
| 第十部分|装配前|五|0|五|2023-01-09 2023-01-09|
| 第一部分|装配前|五|0|五|2023-01-08 2023-01-08|
| 第三部分|规则的|五|0|五|2023-01-01 2023-01-01|
| 第四部分|规则的|五|0|五|2023-01-03 2023-01-03|
| 第五部分|装配前|五|0|五|2023-01-05 2023-01-05 2023-01-05|
| 第六部分|规则的|五|0|五|2023-01-06 2023-01-06|
| 第七部分|规则的|五|0|五|2023-01-07 2023-01-07|
| 第八部分|装配前|五|0|五|2023-01-08 2023-01-08|
| 第九部分|规则的|五|0|五|2023-01-02 2023-01-02|
| 第十部分|规则的|五|0|五|2023-01-02 2023-01-02|
| 第一部分|装配前|十二岁|1|十四岁|2023-01-02 2023-01-02|
| 第一部分|装配前|10个|1|十一|2023-01-03 2023-01-03|
| 第一部分|装配前|十二岁|二|十四岁|2023-01-02 2023-01-02|
我的查询

CREATE TABLE `tblpart` (
  `id` int(11) NOT NULL,
  `part_id` varchar(23) NOT NULL,
  `category` varchar(23) NOT NULL,
  `ok` int(12) NOT NULL,
  `ng` int(12) NOT NULL,
  `total` int(12) NOT NULL,
  `datein` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

--
-- Dumping data for table `tblpart`
--

INSERT INTO `tblpart` (`id`, `part_id`, `category`, `ok`, `ng`, `total`, `datein`) VALUES
(1, 'part 1', 'regullar', 5, 1, 6, '2023-01-02'),
(2, 'part 2', 'beforeassy', 4, 0, 4, '2023-01-03'),
(3, 'part 3', 'beforeassy', 5, 5, 10, '2023-01-03'),
(4, 'part 4', 'newpart', 5, 0, 5, '2023-01-04'),
(5, 'part 5', 'newpart', 5, 0, 5, '2023-01-02'),
(6, 'part 6', 'newpart', 5, 0, 5, '2023-01-04'),
(7, 'part 7', 'regullar ', 5, 0, 5, '2023-01-05'),
(8, 'part 8', 'beforeassy', 5, 0, 5, '2023-01-06'),
(9, 'part 9', 'beforeassy', 5, 0, 5, '2023-01-08'),
(10, 'part 10', 'beforeassy', 5, 0, 5, '2023-01-09'),
(11, 'part 1', 'beforeassy', 5, 0, 5, '2023-01-08'),
(12, 'part 3', 'regullar', 5, 0, 5, '2023-01-01'),
(13, 'part 4', 'regullar', 5, 0, 5, '2023-01-03'),
(14, 'part 5', 'beforeassy', 5, 0, 5, '2023-01-05'),
(15, 'part 6', 'regullar', 5, 0, 5, '2023-01-06'),
(16, 'part 7', 'regullar', 5, 0, 5, '2023-01-07'),
(17, 'part 8', 'beforeassy', 5, 0, 5, '2023-01-08'),
(18, 'part 9', 'regullar', 5, 0, 5, '2023-01-02'),
(19, 'part 10', 'regullar', 5, 0, 5, '2023-01-02'),
(21, 'Part 1', 'beforeassy', 12, 2, 14, '2023-01-02'),
(22, 'Part 1', 'beforeassy', 10, 1, 11, '2023-01-03'),
(23, 'Part 1', 'beforeassy', 12, 2, 14, '2023-01-02');




SELECT part_id, category, sum(ok) as oke, sum(ng) as datang, sum(total) as total, datein 
FROM tblpart 
WHERE datein BETWEEN '2023-01-01' and '2023-01-07' 
GROUP BY part_id 
HAVING category ='regullar' or category ='newpart'  
ORDER by datein;

我的查询结果
| 零件ID|范畴|ok|ng|总计|
| --------------|--------------|--------------|--------------|--------------|
| 第一部分|规则的|三十九|六|四十五|
| 第十部分|规则的|五|0|五|
| 第九部分|规则的|五|0|五|
| 第五部分|纽帕特|10个|0|10个|
| 第六部分|纽帕特|10个|0|10个|
| 第四部分|纽帕特|10个|0|10个|
我只想根据regularand newpart类别对相同的part_id求和。
我的期望:第1部分未求和,因为类别不同
| 零件ID|范畴|ok|ng|总计|
| --------------|--------------|--------------|--------------|--------------|
| 第一部分|规则的|五|1|六|
| 第十部分|规则的|五|0|五|
| 第九部分|规则的|五|0|五|
| 第五部分|纽帕特|10个|0|10个|
| 第六部分|纽帕特|10个|0|10个|
| 第四部分|纽帕特|10个|0|10个|
| 第三部分|规则的|五|0|五|
| 第七部分|规则的|10个|0|10个|

mklgxw1f

mklgxw1f1#

GROUP BY语句将具有相同值的行分组到汇总行中
例如

part_id 7

Will have two rows:
------------------------------------------
part 7  regullar    5   0   5   2023-01-05
------------------------------------------
part 7  regullar    5   0   5   2023-01-07
------------------------------------------
And Part 7 count will be 2 and the ok will be 10, ng will be 0, the total will be 10

您可以更新您的查询,也可以按类别分组

SELECT partId, count(partId) as partIdCount, category, sum(ok) as oke, sum(ng) as datang, sum(total) as total, datein
FROM tblpart 
WHERE datein BETWEEN '2023-01-01' and '2023-01-07' 
GROUP BY partId ,category 
HAVING category ='regullar' or category ='newpart' ORDER by datein;

输出

相关问题