在SQL中,WITH TIES选项与ORDER BY和限制行数的构造(TOP或FETCH FIRST ... ROWS ONLY)一起使用。它允许返回不仅限于严格的N行,还将返回在排序字段值与最后一行(第N行)相同的所有行。
何时需要: 在分析、排名、排行榜时,当包含“平局”或具有相同排名的组时很重要。
示例(SQL Server):
SELECT TOP 3 WITH TIES * FROM Sales ORDER BY Amount DESC;
如果第3名和第4名的销售金额相同,则将返回这两行。
在PostgreSQL中:
SELECT * FROM Sales ORDER BY Amount DESC FETCH FIRST 3 ROWS WITH TIES;
重要: 仅在ORDER BY时有效,否则结果不可预测。
TOP N/LIMIT与使用WITH TIES有什么区别?
常见的错误答案:“WITH TIES只是限制行数,这是同义词。”。
正确答案:
TOP N/LIMIT — 将返回恰好N行,即使下一个行的排序值相同。WITH TIES — 将添加所有在排序字段上与最后一行(第N行)相同的行。示例:
-- 选择前两名结果,但如果有“平局” — 也获取它们: SELECT TOP 2 WITH TIES Name, Score FROM Results ORDER BY Score DESC;
故事
项目: 学生评分比赛。 错误: 仅使用
LIMIT 3,几名获得相同分数的学生出现在获奖名单之外 — 实际的获奖者被错误“切断”。
故事
项目: 电子商务分析。 错误: 想展示前5名热销商品,但在销售SKU相同的情况下仅展示前5名,后在审核时发现部分热销商品未进入报告。
故事
项目: 分支机构销售报告。 错误: 客户期望在相同结果时看到所有领导者,但开发人员并不知道
WITH TIES— 结果不正确,客户对数据质量提出了异议。