【问题标题】:ORDER BY in SQL Server vs PostgresqlSQL Server 与 Postgresql 中的 ORDER BY
【发布时间】:2017-06-13 13:12:29
【问题描述】:

我正在尝试在一个庞大的数据集上运行 ORDER BY 并生成密集排名值以根据密集排名提取不同的行数。后来,我在整个过程中使用密集排名值作为代理键继承中间结果并将其进一步用于一些性能测试。

我面临的问题:-

我遇到的问题是我将数据集从 Matrix(postgresql)(PRODUCTION environment) 迁移到 SQL Server(New environment) 并实现了密集秩函数。但是由于 SQL Server 和 Matrix 中的 ORDER BY 子句行为导致的密集排名结果不同,我无法进一步验证代码和结果。

测试示例:-

SELECT *,DENSE_RANK() OVER ( ORDER BY Col ) AS drnk FROM 
(
SELECT '#2 Mayfair Terrace' AS Col
UNION 
SELECT '#2 MYSTIC COURT' AS Col
)Z;

SQL Server 输出:-

Col                drnk
#2 Mayfair Terrace  1
#2 MYSTIC COURT     2

矩阵(Postgresql)输出:-

Col                drnk
#2 MYSTIC COURT     1
#2 Mayfair Terrace  2

谁能告诉我为什么两个不同的数据库环境之间的 ORDER BY 行为会有所不同?任何帮助,将不胜感激。谢谢。

【问题讨论】:

  • 这是一个排序规则问题。

标签: sql sql-server postgresql sql-order-by dense-rank


【解决方案1】:

这是由不同的排序 collation 引起的。尝试使用collate

select *
 , dense_rank() over (
    order by col collate sql_latin1_general_cp437_bin
    ) as drnk
from (
 select '#2 Mayfair Terrace' as col
 union all
 select '#2 MYSTIC COURT' as col
 ) Z;

返回

+--------------------+------+
|        col         | drnk |
+--------------------+------+
| #2 MYSTIC COURT    |    1 |
| #2 Mayfair Terrace |    2 |
+--------------------+------+

rextester:http://rextester.com/QGM99129

select *
 , dense_rank() over (
    order by col collate 
          sql_latin1_general_cp437_bin
    ) as drnk
from (
 select '#2 Mayfair Terrace' as col
 union all select '#2 MYSTIC COURT' as col
 union all select '#2 NAYSTIC COURT' as col
 union all select '#2 NaYSTIC COURT' as col
 union all select '#2 LaYSTIC COURT' as col
 ) Z;

返回

+--------------------+------+
|        col         | drnk |
+--------------------+------+
| #2 LaYSTIC COURT   |    1 |
| #2 MYSTIC COURT    |    2 |
| #2 Mayfair Terrace |    3 |
| #2 NAYSTIC COURT   |    4 |
| #2 NaYSTIC COURT   |    5 |
+--------------------+------+

【讨论】:

  • 谢谢.. 我需要为每一列添加它以避免这个问题吗?
  • 对于您订单中的所有字符列,是的
  • 效果很好。非常感谢:)
  • @Teja 乐于助人!
猜你喜欢
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多