帮我完善下面的sql查询: SELECT sd.dept_name, SUM(audit.score) FROM sys_dept AS sd, sys_user AS su, audit WHERE sd.dept_id = su.dept_id AND su.user_name = audit.create_by AND audit.`status`='1' AND audit.create_by IN ( SELECT su.user_name FROM sys_user AS su WHERE su.user_id IN ( SELECT sur.user_id FROM sys_user_role AS sur WHERE sur.role_id = ( SELECT role_id FROM sys_role AS sr WHERE sr.role_key = #{roleKey}))) GROUP BY sd.dept_name
时间: 2024-02-10 17:34:27 浏览: 86
这个 SQL 查询的语句已经相当完整,不过缺少一个参数 `roleKey`,需要你在使用时传入具体的值。这个查询语句的作用是查询指定角色下的所有用户所在的部门名称以及其对应的考核总分数,其中:
- `sys_dept` 表代表部门信息,`dept_name` 代表部门名称,`dept_id` 代表部门 ID;
- `sys_user` 表代表用户信息,`user_name` 代表用户名,`dept_id` 代表用户所在的部门 ID;
- `audit` 表代表考核信息,`create_by` 代表考核记录的创建者(即用户的用户名),`score` 代表考核分数,`status` 代表考核记录的状态;
- `sys_user_role` 表代表用户角色关系,`user_id` 和 `role_id` 分别代表用户 ID 和角色 ID;
- `sys_role` 表代表角色信息,`role_key` 代表角色关键字,与传入的参数 `roleKey` 相对应。
如果你想查询某个角色下的所有用户在考核中的得分情况,可以将 `roleKey` 替换为相应的关键字,例如 `'manager'`。
相关问题
优化sql SELECT DISTINCT rtr.rd_report_product_info_id AS rdReportProductInfoId , mar.machine_audit_result AS machineAuditResult,mar.machine_audit_result_desc AS machineAuditResultDesc FROM crm_rd_report_task_result rtr LEFT JOIN crm_rd_machine_audit_record mar ON rtr.dept_code = mar.dept_code AND rtr.belong_year = mar.belong_year AND rtr.belong_month = mar.belong_month WHERE mar.dept_code =#{deptCode} AND mar.belong_year = #{belongYear} AND mar.belong_month = #{belongMonth}
这是一条SQL查询语句,目的是从两个表中获取数据并进行优化。查询结果包括三个字段:rdReportProductInfoId、machineAuditResult和machineAuditResultDesc。其中,rdReportProductInfoId来自crm_rd_report_product_info表,而machineAuditResult和machineAuditResultDesc来自crm_rd_machine_audit_record表。这两个表通过LEFT JOIN连接起来,连接条件是dept_code、belong_year和belong_month。查询条件是mar.dept_code等于某个特定值。这条语句的目的是优化查询效率,提高查询速度。
def add_audit_columns(self, dataframe, write_params): try: print(write_params) audit_source_sys_name = write_params.get("audit_src_sys_name", "") or write_params.get( "table_full_name") or write_params.get("data_source_name", "") print("audit_source_sys_name - " + audit_source_sys_name) if ("audit_src_sys_name".upper() in (name.upper() for name in dataframe.columns)): print("audit_src_sys_name column is present. Adding present layer details....") audit_dataframe = DataSink_with_audit(self.spark).add_audit_col_append(dataframe, audit_source_sys_name, write_params) print("Tables is updated.") else: print("Adding column - audit_src_sys_name.") audit_dataframe = DataSink_with_audit(self.spark).add_audit_col_fill(dataframe, audit_source_sys_name, write_params) print("audit_src_sys_name added.") print("Added Audit Cols") return audit_dataframe except Exception as e: raise Exception("job failed with error {}".format(e))
根据您提供的Python函数,我为您编写了一个MySQL存储过程的示例,但是需要根据您的具体需求进行修改和调整。这个存储过程的功能是向数据表中添加一个名为audit_src_sys_name的列,同时向这个列中填充相应的值。
```
CREATE PROCEDURE add_audit_columns(
IN df_column_names VARCHAR(255),
IN df_values VARCHAR(255),
IN write_params TEXT,
OUT audit_dataframe TEXT
)
BEGIN
DECLARE audit_source_sys_name VARCHAR(255);
DECLARE column_present BOOLEAN;
DECLARE sql_stmt TEXT;
SET audit_source_sys_name = JSON_EXTRACT(write_params, '$.audit_src_sys_name');
IF audit_source_sys_name IS NULL OR audit_source_sys_name = '' THEN
SET audit_source_sys_name = JSON_EXTRACT(write_params, '$.table_full_name');
END IF;
SET column_present = FALSE;
SET sql_stmt = CONCAT('SELECT COUNT(*) INTO @exists FROM information_schema.columns WHERE table_name = \'', df_column_names, '\' AND column_name = \'audit_src_sys_name\'');
PREPARE stmt FROM sql_stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
IF @exists > 0 THEN
SET column_present = TRUE;
SET sql_stmt = CONCAT('UPDATE ', df_column_names, ' SET audit_src_sys_name = \'', audit_source_sys_name, '\'');
ELSE
SET sql_stmt = CONCAT('ALTER TABLE ', df_column_names, ' ADD COLUMN audit_src_sys_name VARCHAR(255) DEFAULT NULL AFTER ', df_values);
PREPARE stmt FROM sql_stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END IF;
IF column_present THEN
SET audit_dataframe = CONCAT('Audit source system name column is present. Adding present layer details....\n');
SET sql_stmt = CONCAT('UPDATE ', df_column_names, ' SET audit_src_sys_name = CONCAT(audit_src_sys_name, \', \', \'', audit_source_sys_name, '\')');
ELSE
SET audit_dataframe = CONCAT('Adding column - audit_src_sys_name.\n');
SET sql_stmt = CONCAT('UPDATE ', df_column_names, ' SET audit_src_sys_name = \'', audit_source_sys_name, '\'');
END IF;
PREPARE stmt FROM sql_stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET audit_dataframe = CONCAT(audit_dataframe, 'Tables is updated.\n');
END
```
这个存储过程的输入参数包括数据表的列名、值、以及一个JSON格式的字符串write_params,其中包含各种写入参数信息。输出参数是一个JSON格式的字符串audit_dataframe,包含存储过程的执行结果信息。请注意,这只是一个示例,您需要根据实际情况进行修改和调整。
阅读全文
相关推荐















