1

我正在用 C# 和 Java 实现一个应用程序,并且希望具有类似于 SQL 中的 ORDER BY 函数的功能。但是,要做到这一点,我必须了解对多列进行排序的概念。

我曾尝试编写简单的 SQL 语句,例如

SELECT * FROM TABLE ORDER BY Field1,Field2.

这样做时,只有Field1被订购。指定多个列实际上有什么用吗?

4

5 回答 5

4

考虑一下:如果Field1行值相等怎么办?

基本上,在您的示例中,您首先按Field1排序,如果值相等,则按Field2

例子:

Field1 | Field2
A        4
B        1
A        3

order by Field1, Field2

Field1 | Field2
A        3
A        4
B        1
于 2013-02-16T10:38:04.353 回答
1

这样做时,仅订购 Field1。

否。当第一列值相等时,第二列用于排序。

让我们考虑您创建一个这样的表;

CREATE TABLE tbl
    ([Field1] varchar(1), [Field2] int)
;

INSERT INTO tbl
    ([Field1], [Field2])
VALUES
    ('A', 1),
    ('A', 2),
    ('B', 1),
    ('B', 2),
    ('C', 4),
    ('C', 2),
    ('C', 1)
;

当你运行这个query;

Select *
From tbl
Order by Field1

结果它给了你

FIELD1  FIELD2
A   1
A   2
B   1
B   2
C   4
C   2
C   1

这是正常的,因为我们仅根据Field1. 它不关心其他列。

但是当你运行它时query

Select *
From tbl
Order by Field1, Field2

这给了你结果

FIELD1  FIELD2
A   1
A   2
B   1
B   2
C   1
C   2
C   4

这很正常,因为我们说要查询;首先,根据Field1列值对结果进行排序,如果某些Field1值相等,则根据Field2列对它们进行排序。

于 2013-02-16T10:40:09.073 回答
0

如果有多个具有相同值的行Field1,它们将在内部排序Field2

Field1 | Field2
-------+--------
 1     | 243
 2     | 23
 2     | 42
 2     | 278
 3     | 1
于 2013-02-16T10:40:25.913 回答
0

假设表是“person”,Field1 是“last_name”(姓氏),Field2 是“first_name”(名字),那么三个共享姓氏“Smith”的人将应用第二类名字。

Smith Tim
Picard Bernard
Smith Alice
Smith Bob

变成……</p>

Picard Bernard
Smith Alice
Smith Bob
Smith Tim

正如其他人所说,当先前的排序字段遇到重复值时,连续的排序字段就会发挥作用。

于 2013-02-16T10:46:59.317 回答
0

如果您在 ORDER 子句中指定多个列,它会按第一个、然后是第二个、然后是第三个......等等。例如,如果您按 Forename, Surname 排序,则结果将首先按 Forename 排序,即所有 A 在第一个,然后按 Surname,因此每个 A 将按其姓氏排序,因此如果您有两个 Albert's数据,按照阿尔伯特爱因斯坦和阿尔伯特戴维斯的顺序出现在您的未排序表中,它们将按姓氏的顺序出现在列表中,即

Forename   |   Surname
Albert     |   Davies
Albert     |   Einstein
Arthur     |   Dent

如果您只是按名字订购,您将获得以下信息(当然,前提是爱因斯坦出现在您未排序表中的戴维斯上方):

Forename   |   Surname
Albert     |   Einstein
Albert     |   Davies
Arthur     |   Dent
于 2013-02-16T10:50:55.643 回答