MySQL Server:检查组中是否存在条件,然后标记整个组

MySQLServer: Check if conditions exist in group, then label entire group

我的目标是向现有 table 添加另一列,以查看 value/conditions 是否存在于组中,并适当地标记整个组是否存在。

如果一个团队有一个预算 >= 20M 或 Actual_Spend >=2.5M 的项目,我想在类别列中将团队及其所有项目标记为 Table 1。无论同一团队中的其他项目是否符合此标准。

我会提供一个 SQL fiddle link 我的解决方案:http://sqlfiddle.com/#!18/3ddaf/12/0 我最终得到了 "Team" 和 "Category" 两个额外的列,但不确定它们是如何结束的。 以下是我正在寻找的最终结果。我愿意接受比我提供的更好的解决方案。

感谢您的宝贵时间

    | Team | ProjectID | Budget   | Actual_Spend | State      | Category |
    |------|-----------|----------|--------------|------------|----------|
    | Cyan | 2         | NULL     | NULL         | Utah       | Table 1  |
    | Blue | 1         | NULL     | 3000000      | California | Table 1  |
    | Cyan | 1         | 20000000 | 1000000      | Utah       | Table 1  |
    | Blue | 2         | 22000000 | NULL         | California | Table 1  |
    | Red  | 1         | 7000000  | 1000000      | Washington | Table 2  |
    | Red  | 2         | 19999000 | 2490000      | Oregon     | Table 2  |
    | Gray | 1         | 19000000 | 2500000      | Utah       | Table 1  |
    | Gray | 1         | 10000000 | 500000       | Utah       | Table 1  |

提供创建数据集的代码:

    Create Table Source_Data
    (
      Team varchar(50),
      ProjectID  INT,
      BUDGET INT,
      Actual_Spend INT,
      State varchar(max),
     )

     INSERT INTO Source_Data
     VALUES
     ('Blue',1,NULL,3000000,'California'),
     ('Green',1,20000000,1000000,'Utah'),
     ('Blue',2,22000000,NULL,'California'),
     ('Green',2,NULL,NULL,'Utah'),
     ('Red',1,7000000,1000000,'Washington'),
     ('Red',2,19999000,2490000,'Oregon'),
     ('Yellow',1,19000000,2500000,'Utah'),
     ('Yellow',1,10000000,500000,'Utah');

我认为您正在寻找 window 函数:

select
    s.*,
    min(case when Budget>=20000000 or Actual_Spend>=2500000 then 'Table1' else 'Table2' end)
        over(partition by team) Category
from Source_Data s

如果任何具有相同团队的记录满足条件Budget>=20000000 or Actual_Spend>=2500000,则新列产生Table1,否则产生Table2

Demo on DB Fiddle:

Team | ProjectID |   Budget | Actual_Spend | State      | Category
:--- | --------: | -------: | -----------: | :--------- | :-------
Blue |         2 | 22000000 |         null | California | Table1  
Blue |         1 |     null |      3000000 | California | Table1  
Cyan |         1 | 20000000 |      1000000 | Utah       | Table1  
Cyan |         2 |     null |         null | Utah       | Table1  
Gray |         1 | 19000000 |      2500000 | Utah       | Table1  
Gray |         1 | 10000000 |       500000 | Utah       | Table1  
Red  |         1 |  7000000 |      1000000 | Washington | Table2  
Red  |         2 | 19999000 |      2490000 | Oregon     | Table2