学校网站开发必要性与意义,最大的地方门户网站源码,邢台百姓网官网,爱站网挖掘工具问题重新:
sql语句中使用了GROUP BY wf_cur.REQUESTID, wf_cur.NODEID,为什么还会出用两行相同REQUESTID的记录呢#xff0c;GROUP BY不就是拿某个字段来分组吗#xff1f;GROUP BY 是按你指定的字段组合进行分组的#xff0c;不是按单个字段。你的例子#xff1a;sqlGROUP…问题重新:sql语句中使用了GROUP BY wf_cur.REQUESTID, wf_cur.NODEID,为什么还会出用两行相同REQUESTID的记录呢GROUP BY不就是拿某个字段来分组吗GROUP BY 是按你指定的字段组合进行分组的不是按单个字段。你的例子sqlGROUP BY wf_cur.REQUESTID, wf_cur.NODEID这意味着只有 REQUESTID 和 NODEID 都相同的记录才会被分到同一组。实际示例假设原始数据textREQUESTID NODEID USERID LASTNAME 1001 10 1 张三 1001 10 2 李四 - 同一组REQUESTID和NODEID都相同 1001 20 3 王五 - 不同组NODEID不同 1001 20 4 赵六 - 同一组 1002 10 5 钱七 - 不同组REQUESTID不同分组结果组1REQUESTID1001, NODEID10包含张三、李四GROUP_CONCAT结果张三, 李四组2REQUESTID1001, NODEID20包含王五、赵六GROUP_CONCAT结果王五, 赵六组3REQUESTID1002, NODEID10包含钱七GROUP_CONCAT结果钱七为什么会出现多行相同REQUESTID因为同一个REQUESTID可能有不同的NODEID在你的工作流系统中一个流程REQUESTID会经过多个节点NODEID每个节点可能有不同的处理人所以同一个REQUESTID会出现在多个不同的节点中你的数据示例textREQUESTID NODEID 处理人 303364 371 何永刚 303364 372 何永刚, 谢雨芯 - 节点372 303364 374 韦丹妮, 谢雨芯 - 节点374不同节点 303364 377 李华妹 - 节点377不同节点GROUP BY REQUESTID, NODEID 后每个(REQUESTID, NODEID)组合成为一行textREQUESTID NODEID names 303364 371 何永刚 303364 372 何永刚, 谢雨芯 303364 374 韦丹妮, 谢雨芯 303364 377 李华妹对比不同的GROUP BY方式1. 按REQUESTID和NODEID分组你的方式sqlGROUP BY REQUESTID, NODEID结果一个REQUESTID在不同节点会有多行记录2. 只按REQUESTID分组sqlGROUP BY REQUESTID结果一个REQUESTID只有一行记录合并所有节点的人员textREQUESTID names 303364 何永刚, 何永刚, 谢雨芯, 谢雨芯, 韦丹妮, 李华妹...3. 只按NODEID分组sqlGROUP BY NODEID结果同一个节点来自不同流程的人员合并textNODEID names 372 何永刚(303364), 谢雨芯(303364), 张三(其他流程), 李四(其他流程)...验证SQL运行这个来查看实际的分组情况sql-- 查看每个REQUESTID有多少个不同的NODEID SELECT REQUESTID, COUNT(DISTINCT NODEID) AS node_count, GROUP_CONCAT(DISTINCT NODEID ORDER BY NODEID) AS node_list, COUNT(DISTINCT USERID) AS user_count FROM workflow_currentoperator WHERE ISREMARK IN (0, 4) AND REQUESTID IN (303364, 303365, 303366) -- 你的示例REQUESTID GROUP BY REQUESTID ORDER BY REQUESTID;根据需求选择正确的GROUP BY场景1想要每个流程每个节点的处理人列表你现在的需求sql-- 正确显示流程在每个节点上的处理人 SELECT REQUESTID, NODEID, GROUP_CONCAT(DISTINCT LASTNAME ORDER BY LASTNAME SEPARATOR , ) AS node_handlers FROM workflow_currentoperator wf_cur INNER JOIN hrmresource zper ON wf_cur.USERID zper.ID WHERE wf_cur.ISREMARK IN (0, 4) GROUP BY REQUESTID, NODEID;场景2想要每个流程的所有处理人合并所有节点sql-- 合并流程的所有处理人不管在哪个节点 SELECT REQUESTID, GROUP_CONCAT(DISTINCT LASTNAME ORDER BY LASTNAME SEPARATOR , ) AS all_handlers, COUNT(DISTINCT NODEID) AS total_nodes FROM workflow_currentoperator wf_cur INNER JOIN hrmresource zper ON wf_cur.USERID zper.ID WHERE wf_cur.ISREMARK IN (0, 4) GROUP BY REQUESTID;场景3想要每个节点的所有处理人合并所有流程sql-- 查看每个节点有哪些人在处理来自不同流程 SELECT NODEID, GROUP_CONCAT( DISTINCT CONCAT(LASTNAME, (, REQUESTID, )) ORDER BY LASTNAME SEPARATOR , ) AS handlers_by_process, COUNT(DISTINCT REQUESTID) AS process_count FROM workflow_currentoperator wf_cur INNER JOIN hrmresource zper ON wf_cur.USERID zper.ID WHERE wf_cur.ISREMARK IN (0, 4) GROUP BY NODEID;总结GROUP BY REQUESTID, NODEID 的结果是正常的同一个REQUESTID 不同的NODEID 不同的分组这反映了工作流的真实情况一个流程会经过多个节点每个节点可能有不同的处理人如果你想要每个REQUESTID只显示一行应该用GROUP BY REQUESTID。但根据你的数据同一个REQUESTID在不同节点确实有不同的处理人所以显示多行是正确的。