sql存储过程,根据校区算出>=60岁、>=50岁、>=40岁、>=30岁和30岁以下的人数,然后相加总人数
时间: 2024-03-09 18:51:43 浏览: 9
好的,这是一个比较典型的统计存储过程,可以按照以下步骤实现:
1. 创建存储过程并输入参数
```sql
CREATE PROCEDURE count_age_by_campus
@campus varchar(50)
AS
```
2. 声明变量并初始化
```sql
DECLARE @age60 INT, @age50 INT, @age40 INT, @age30 INT, @age_under30 INT, @total INT
SET @age60 = 0
SET @age50 = 0
SET @age40 = 0
SET @age30 = 0
SET @age_under30 = 0
SET @total = 0
```
3. 查询并统计各年龄段人数
```sql
SELECT
@age60 = COUNT(*)
FROM
student
WHERE
campus = @campus AND
DATEDIFF(yy, birthdate, GETDATE()) >= 60
SELECT
@age50 = COUNT(*)
FROM
student
WHERE
campus = @campus AND
DATEDIFF(yy, birthdate, GETDATE()) >= 50 AND
DATEDIFF(yy, birthdate, GETDATE()) < 60
SELECT
@age40 = COUNT(*)
FROM
student
WHERE
campus = @campus AND
DATEDIFF(yy, birthdate, GETDATE()) >= 40 AND
DATEDIFF(yy, birthdate, GETDATE()) < 50
SELECT
@age30 = COUNT(*)
FROM
student
WHERE
campus = @campus AND
DATEDIFF(yy, birthdate, GETDATE()) >= 30 AND
DATEDIFF(yy, birthdate, GETDATE()) < 40
SELECT
@age_under30 = COUNT(*)
FROM
student
WHERE
campus = @campus AND
DATEDIFF(yy, birthdate, GETDATE()) < 30
```
4. 计算总人数
```sql
SET @total = @age60 + @age50 + @age40 + @age30 + @age_under30
```
5. 返回结果
```sql
SELECT
@age60 AS age60,
@age50 AS age50,
@age40 AS age40,
@age30 AS age30,
@age_under30 AS age_under30,
@total AS total
```
完整的存储过程如下:
```sql
CREATE PROCEDURE count_age_by_campus
@campus varchar(50)
AS
BEGIN
DECLARE @age60 INT, @age50 INT, @age40 INT, @age30 INT, @age_under30 INT, @total INT
SET @age60 = 0
SET @age50 = 0
SET @age40 = 0
SET @age30 = 0
SET @age_under30 = 0
SET @total = 0
SELECT
@age60 = COUNT(*)
FROM
student
WHERE
campus = @campus AND
DATEDIFF(yy, birthdate, GETDATE()) >= 60
SELECT
@age50 = COUNT(*)
FROM
student
WHERE
campus = @campus AND
DATEDIFF(yy, birthdate, GETDATE()) >= 50 AND
DATEDIFF(yy, birthdate, GETDATE()) < 60
SELECT
@age40 = COUNT(*)
FROM
student
WHERE
campus = @campus AND
DATEDIFF(yy, birthdate, GETDATE()) >= 40 AND
DATEDIFF(yy, birthdate, GETDATE()) < 50
SELECT
@age30 = COUNT(*)
FROM
student
WHERE
campus = @campus AND
DATEDIFF(yy, birthdate, GETDATE()) >= 30 AND
DATEDIFF(yy, birthdate, GETDATE()) < 40
SELECT
@age_under30 = COUNT(*)
FROM
student
WHERE
campus = @campus AND
DATEDIFF(yy, birthdate, GETDATE()) < 30
SET @total = @age60 + @age50 + @age40 + @age30 + @age_under30
SELECT
@age60 AS age60,
@age50 AS age50,
@age40 AS age40,
@age30 AS age30,
@age_under30 AS age_under30,
@total AS total
END
```
使用方法:
```sql
EXEC count_age_by_campus 'A校区'
```
其中,'A校区'为参数,可以根据实际情况进行修改。