我有一个有趣的要求,即使用不同的条件对数据集进行分区。
说,首先我不得不说GROUP BY
或ORDER BY
。
是排名吗?是的,更接近,但这里的挑战是为此写一个查询。
嗯,我仍然想知道并寻找一个直接的选择。我来介绍一个问题。
Name ----- Age ----- MarksForMaths ---- AvgByTotal
上面是一个简单的示例模式,它可以是少数学生为数学和所有平均分数所采用的标记。
我需要根据以下标准过滤掉这个集合。
是的,显然排名和过滤是一个选项,但我们可以在优化查询中进行吗?
提示 - 我所做的基本上是创建一个额外的列名RANK
,并根据条件使用索引更新列。
然后它只是一个问题或按RANK
过滤数据顺序。小菜一碟 !
但问题是,我们可以进行一次查询吗?欣赏提示。
由于
答案 0 :(得分:0)
以下查询是否符合您的要求:
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