操作者之间 年龄 年龄组之间

Between operator Age Between Age Group

我有两个table

Table一个

Age Students
5 2
6 5
4 1

均值 2 名学生 5 岁 5 名学生 6 岁和 1 学生年龄为 4

Table两个

GroupName MinAge MaxAge StudentsCount
GroupA 3 5 0
GroupB 5 7 0

均值 2 教练组在那里。 第一个是GroupA,第二个是GroupB GroupA 年龄段介于 3 至 5 岁之间 GroupB 年龄组 5 至 7 岁 在这种情况下,A 组有 3 个学生,B 组有 5 个学生。

我想更新 table2 中的 StudentsCount 列,例如 GroupA = 3 和 GroupB = 5

我正在使用 between 运算符,但结果是错误的。

update a
    set a.StudentsCount = b.Students 
from Table2 a, Table1 b 
where b.age between a.MinAge and a.MaxAge

当我使用上面的查询 StudentsCount 字段时,两条记录都更新为 2。已经尝试过 >= 和 <= 但没有运气。任何人都知道简单的 table 查询请更新。谢谢。

您使用了错误的方法。不需要加入。你想更新表 2?然后UPDATE table2。你想更新它的 StudentsCount?然后SET StudentsCount = ...。你想要学生人数的总和?然后SUM(Students).

UPDATE table2
SET studentscount = 
(
  SELECT COALESCE(SUM(students), 0)
  FROM table1
  WHERE table1.age BETWEEN table2.minage AND table2.maxage
);

两条备注:

  • 正如其他人所提到的,在您的样本数据中,您对 5 岁的学生进行了两次计数,一次在 3-5 范围内,一次在 5-7 范围内。您可能希望范围为 3-5 和 6-7 或 3-4 和 5-7。
  • 我们避免数据库中的冗余。您始终可以临时计算学生人数。您甚至可以为此创建一个视图。冗余存储总和通常不是一个好主意。