Mysql 有条件地计算行中某列作为多个值之一的次数?

Mysql 有条件地计算行中某列作为多个值之一的次数?,mysql,Mysql,是否有MySQL固有的基于列值构建计数的方法?我的用例如下所示: +----------+----------------+--------------------------+------------------+--------------------+---------+-------------+--------------------+--------------------+----------------------------+--------------------------

是否有MySQL固有的基于列值构建计数的方法?我的用例如下所示:

+----------+----------------+--------------------------+------------------+--------------------+---------+-------------+--------------------+--------------------+----------------------------+-------------------------------+--------------------------------+--------------------------------+--------------------------------+-----------------+---------------------+---------------------+-----------------------------+------------------+------------------+
| Employee | Pre-Inspection | Pre-Washing (Jig-Washer) | Stripping (Shot) | Stripping (Liquid) | WPC-SKH | WPC-Ceramic | Pre-Lapping (SMAP) | Pre-Lapping (AERO) | Pre-Lapping (Hand Lapping) | Pre-Washing (F1 Clean Washer) | Coating (M1) - Set/Disassemble | Coating (M2) - Set/Disassemble | Coating (M3) - Set/Disassemble | Post-Inspection | Post-Lapping (SMAP) | Post-Lapping (AERO) | Post-Lapping (Hand Lapping) | Final Inspection | Packing/Shipping |
+----------+----------------+--------------------------+------------------+--------------------+---------+-------------+--------------------+--------------------+----------------------------+-------------------------------+--------------------------------+--------------------------------+--------------------------------+-----------------+---------------------+---------------------+-----------------------------+------------------+------------------+
| 1        | 7              | 2                        | 0                | 0                  | 3       | 0           | 0                  | 1                  | 2                          | 0                             | 0                              | 0                              | 0                              | 0               | 0                   | 0                   | 0                           | 0                | 0                |
+----------+----------------+--------------------------+------------------+--------------------+---------+-------------+--------------------+--------------------+----------------------------+-------------------------------+--------------------------------+--------------------------------+--------------------------------+-----------------+---------------------+---------------------+-----------------------------+------------------+------------------+
| 1190     | 1              | 0                        | 0                | 0                  | 1       | 0           | 0                  | 1                  | 0                          | 0                             | 0                              | 0                              | 0                              | 1               | 0                   | 0                   | 0                           | 0                | 0                |
+----------+----------------+--------------------------+------------------+--------------------+---------+-------------+--------------------+--------------------+----------------------------+-------------------------------+--------------------------------+--------------------------------+--------------------------------+-----------------+---------------------+---------------------+-----------------------------+------------------+------------------+
我有机器、员工和产品。每次员工与一台机器和一种产品交互时,都会在名为entries的单独表中生成一个条目。每台机器都有一个与称为stage的表的值相对应的类型。我想使用一个复杂的查询来计算员工完成每个阶段的次数

每个表的模式如下:
条目表:

用户(员工)表:

阶段表:

机床工作台:

逻辑如下:

从表中提取阶段名称

从输入表中拉出机器,其中ID是我正在寻找的员工

循环遍历输入结果,根据MachineType是否等于StageName向变量添加计数

我想知道在MySQL中是否有一种本机方法来实现这一点,或者是否需要提取所有信息并在后端服务器代码中进行计数

到目前为止,我的思路是在SQL语句中使用某种case语句。我对SQL非常陌生,所以我不知道从哪里开始格式化这样的查询。这听起来像是正确的方向吗

预期结果如下:

+----------+----------------+--------------------------+------------------+--------------------+---------+-------------+--------------------+--------------------+----------------------------+-------------------------------+--------------------------------+--------------------------------+--------------------------------+-----------------+---------------------+---------------------+-----------------------------+------------------+------------------+
| Employee | Pre-Inspection | Pre-Washing (Jig-Washer) | Stripping (Shot) | Stripping (Liquid) | WPC-SKH | WPC-Ceramic | Pre-Lapping (SMAP) | Pre-Lapping (AERO) | Pre-Lapping (Hand Lapping) | Pre-Washing (F1 Clean Washer) | Coating (M1) - Set/Disassemble | Coating (M2) - Set/Disassemble | Coating (M3) - Set/Disassemble | Post-Inspection | Post-Lapping (SMAP) | Post-Lapping (AERO) | Post-Lapping (Hand Lapping) | Final Inspection | Packing/Shipping |
+----------+----------------+--------------------------+------------------+--------------------+---------+-------------+--------------------+--------------------+----------------------------+-------------------------------+--------------------------------+--------------------------------+--------------------------------+-----------------+---------------------+---------------------+-----------------------------+------------------+------------------+
| 1        | 7              | 2                        | 0                | 0                  | 3       | 0           | 0                  | 1                  | 2                          | 0                             | 0                              | 0                              | 0                              | 0               | 0                   | 0                   | 0                           | 0                | 0                |
+----------+----------------+--------------------------+------------------+--------------------+---------+-------------+--------------------+--------------------+----------------------------+-------------------------------+--------------------------------+--------------------------------+--------------------------------+-----------------+---------------------+---------------------+-----------------------------+------------------+------------------+
| 1190     | 1              | 0                        | 0                | 0                  | 1       | 0           | 0                  | 1                  | 0                          | 0                             | 0                              | 0                              | 0                              | 1               | 0                   | 0                   | 0                           | 0                | 0                |
+----------+----------------+--------------------------+------------------+--------------------+---------+-------------+--------------------+--------------------+----------------------------+-------------------------------+--------------------------------+--------------------------------+--------------------------------+-----------------+---------------------+---------------------+-----------------------------+------------------+------------------+

图片没有用处。提供创建表脚本,将示例数据插入到脚本中,并为该数据提供所需的输出。@Akina我已编辑添加表sql和当前工作测试数据。我将手动确定此数据集的输出,并很快再次编辑问题以添加预期结果。很抱歉这个格式不好的问题!我还添加了预期结果。
DROP TABLE IF EXISTS `stage`;
CREATE TABLE `stage` (
  `StageID` int(11) NOT NULL,
  `StageName` varchar(45) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `stage` (`StageID`, `StageName`) VALUES
(1, 'Pre-Inspection'),
(2, 'Pre-Washing (Jig-Washer)'),
(3, 'Stripping (Shot)'),
(4, 'Stripping (Liquid)'),
(5, 'WPC-SKH'),
(6, 'WPC-Ceramic'),
(7, 'Pre-Lapping (SMAP)'),
(8, 'Pre-Lapping (AERO)'),
(9, 'Pre-Lapping (Hand Lapping)'),
(10, 'Pre-Washing (F1 Clean Washer)'),
(11, 'Coating (M1) - Set/Disassemble'),
(12, 'Coating (M2) - Set/Disassemble'),
(13, 'Coating (M3) - Set/Disassemble'),
(14, 'Post-Inspection'),
(15, 'Post-Lapping (SMAP)'),
(16, 'Post-Lapping (AERO)'),
(17, 'Post-Lapping (Hand Lapping)'),
(18, 'Final Inspection'),
(19, 'Packing/Shipping');
DROP TABLE IF EXISTS `machine`;
CREATE TABLE `machine` (
  `MachineID` int(11) NOT NULL,
  `NumberOfTimesUsed` int(11) DEFAULT NULL,
  `MachineType` varchar(45) DEFAULT NULL,
  `HoursUptime` double UNSIGNED NOT NULL DEFAULT 0 COMMENT 'the number of hours a machine has been used',
  `LastMaintenanceDate` date DEFAULT NULL,
  `MachineAutoTime` int(11) DEFAULT NULL COMMENT 'The time a machine runs without human interaction'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `machine` (`MachineID`, `NumberOfTimesUsed`, `MachineType`, `HoursUptime`, `LastMaintenanceDate`, `MachineAutoTime`) VALUES
(1, 0, 'Pre-Inspection', 2.8641666666667, '2020-11-13', 0),
(2, 0, 'Pre-Washing (Jig-Washer)', 45.8408333333339, NULL, 0),
(3, 0, 'Stripping (Shot)', 25.089722222222672, NULL, 0),
(4, 0, 'Stripping (Liquid)', 0, NULL, 0),
(5, 0, 'WPC-SKH', 0, '2020-11-18', 0),
(6, 0, 'WPC-Ceramic', 0.18944444444444, NULL, 0),
(7, 0, 'Pre-Lapping (SMAP)', 0, NULL, 0),
(8, 0, 'Pre-Lapping (AERO)', 0.363888888888888, NULL, 0),
(9, 0, 'Pre-Lapping (Hand Lapping)', 115.62416666666556, '2020-11-08', 0),
(10, 0, 'Pre-Washing (F1 Clean Washer)', 0, NULL, 0),
(11, 0, 'Coating (M1) - Set/Disassemble', 0, NULL, 0),
(12, 0, 'Coating (M2) - Set/Disassemble', 0, NULL, 0),
(13, 0, 'Coating (M3) - Set/Disassemble', 0, NULL, 0),
(14, 0, 'Post-Inspection', 0, NULL, 0),
(15, 0, 'Post-Lapping (SMAP)', 23.692222222222, NULL, 0),
(16, 0, 'Post-Lapping (AERO)', 0, NULL, 0),
(17, 0, 'Post-Lapping (Hand Lapping)', 0, NULL, 0),
(18, 0, 'Final Inspection', 0, NULL, 0),
(19, 0, 'Packing/Shipping', 44.83916666666622, NULL, 0);
+----------+----------------+--------------------------+------------------+--------------------+---------+-------------+--------------------+--------------------+----------------------------+-------------------------------+--------------------------------+--------------------------------+--------------------------------+-----------------+---------------------+---------------------+-----------------------------+------------------+------------------+
| Employee | Pre-Inspection | Pre-Washing (Jig-Washer) | Stripping (Shot) | Stripping (Liquid) | WPC-SKH | WPC-Ceramic | Pre-Lapping (SMAP) | Pre-Lapping (AERO) | Pre-Lapping (Hand Lapping) | Pre-Washing (F1 Clean Washer) | Coating (M1) - Set/Disassemble | Coating (M2) - Set/Disassemble | Coating (M3) - Set/Disassemble | Post-Inspection | Post-Lapping (SMAP) | Post-Lapping (AERO) | Post-Lapping (Hand Lapping) | Final Inspection | Packing/Shipping |
+----------+----------------+--------------------------+------------------+--------------------+---------+-------------+--------------------+--------------------+----------------------------+-------------------------------+--------------------------------+--------------------------------+--------------------------------+-----------------+---------------------+---------------------+-----------------------------+------------------+------------------+
| 1        | 7              | 2                        | 0                | 0                  | 3       | 0           | 0                  | 1                  | 2                          | 0                             | 0                              | 0                              | 0                              | 0               | 0                   | 0                   | 0                           | 0                | 0                |
+----------+----------------+--------------------------+------------------+--------------------+---------+-------------+--------------------+--------------------+----------------------------+-------------------------------+--------------------------------+--------------------------------+--------------------------------+-----------------+---------------------+---------------------+-----------------------------+------------------+------------------+
| 1190     | 1              | 0                        | 0                | 0                  | 1       | 0           | 0                  | 1                  | 0                          | 0                             | 0                              | 0                              | 0                              | 1               | 0                   | 0                   | 0                           | 0                | 0                |
+----------+----------------+--------------------------+------------------+--------------------+---------+-------------+--------------------+--------------------+----------------------------+-------------------------------+--------------------------------+--------------------------------+--------------------------------+-----------------+---------------------+---------------------+-----------------------------+------------------+------------------+