有员工id,员工进出状态,进出时间三个字段,用SQL求每个员工呆在公司总时间!
时间: 2024-04-30 11:19:36 浏览: 8
可以使用以下SQL语句来实现:
```
SELECT
员工id,
SUM(CASE WHEN 员工进出状态 = '进' THEN 进出时间 ELSE -进出时间 END) AS 总时间
FROM
员工进出记录表
GROUP BY
员工id
```
解释一下上述SQL语句的思路:
首先根据员工id进行分组,然后采用SUM函数将每个员工的进出时间进行累加,其中根据员工进出状态来区分进出时间的正负。当员工进出状态为“进”时,进出时间为正数,否则为负数。最终得到每个员工在公司的总时间。
相关问题
假如有学生id,学科,成绩这三个字段,求每个学生的总成绩
可以使用SQL语言的GROUP BY子句和聚合函数SUM来计算每个学生的总成绩。假设你有一个"scores"表,包含学生的成绩信息(如学生ID、学科、成绩等),那么你可以使用以下SQL语句来计算每个学生的总成绩:
```
SELECT student_id, SUM(score) AS total_score
FROM scores
GROUP BY student_id;
```
这个查询语句中,使用了GROUP BY子句按照学生ID进行分组,并使用SUM函数计算每个学生的所有科目成绩的总和。最后,查询结果中包括每个学生的ID和总成绩。
如果通过sql快速计算每个单位包含下级的员工数量
可以使用以下SQL语句来计算每个单位包含下级的员工数量:
```sql
WITH RECURSIVE cte AS (
SELECT unit_id, COUNT(*) AS count
FROM employees
GROUP BY unit_id
UNION ALL
SELECT e.unit_id, COUNT(*) AS count
FROM employees e
JOIN cte ON e.manager_id = cte.unit_id
GROUP BY e.unit_id
)
SELECT unit_id, SUM(count) AS total_count
FROM cte
GROUP BY unit_id;
```
这个查询使用了递归CTE(通用表达式),首先计算每个单位直接包含的员工数量,然后递归地计算每个单位下级包含的员工数量,并且将它们累加起来。最后,使用一个GROUP BY子句汇总每个单位的总员工数量。