按多个条件 SQL 对数据集进行分区

Partition a dataset by multiple conditions TSQL

我有一个有趣的要求,即使用不同条件对数据集进行分区。

说起来,不简单GROUP BY or ORDER BY 不得不先说

是排名吗?是的,更接近一点,但这里的挑战是为此编写一个查询。

好吧,我仍然想知道并寻找直接的选择。让我介绍一个问题。

Name ----- Age ----- MarksForMaths ---- AvgByTotal 

以上是一个简单的示例模式,其中可以是少数学生的数学分数和所有平均分数。

我需要根据以下标准过滤掉这个集合。

  1. 获得 75 > Mathsmarks > 50 的人应该名列前茅
  2. Mathsmarks > 90 的人应该是下一组
  3. 平均 > 65 的人
  4. 老年人年龄 > 55应该是最后一组

是的,排名和过滤器显然是一个选项,但我们可以在优化查询中做到这一点吗?

提示 - 我所做的基本上是创建一个额外的列名 RANK 并根据条件使用索引更新该列。

那么就是按RANK筛选数据顺序的事了。小菜一碟 !

但这里的问题是,我们可以进行一次性查询吗?感谢提示。

谢谢

以下查询是否符合您的要求:

DECLARE @BaseTable TABLE (Name VARCHAR(50), Age INT, MarksForMaths INT, AvgByTotal INT)

INSERT INTO @BaseTable (Name, Age, MarksForMaths, AvgByTotal)
SELECT 'A', 1, 65, 12 UNION ALL
SELECT 'B', 1, 5, 75 UNION ALL
SELECT 'C', 1, 95, 12 UNION ALL
SELECT 'D', 65, 65, 12 UNION ALL
SELECT 'E', 65, 5, 12

SELECT tmp.Name, tmp.TmpRank
FROM
(
    SELECT 
        Name,
        CASE 
             WHEN (MarksForMaths > 50 AND MarksForMaths < 75) THEN 1
             WHEN (MarksForMaths > 90) THEN 2
             WHEN (AvgByTotal > 65) THEN 3
             WHEN (Age > 55) THEN 4
             ELSE 5 
       END AS TmpRank
    FROM @BaseTable
)   tmp
ORDER BY tmp.TmpRank