【发布时间】:2014-06-24 14:13:42
【问题描述】:
我现在头发都变白了……
我有一张这样的桌子。
ID - Place - Person
1 - London - Anna
2 - Stockholm - Johan
3 - Gothenburg - Anna
4 - London - Nils
我想得到包含所有不同人的结果,但我想选择订购的地点。
例如。我想得到一个列表,它们是由 LONDON 订购的,其余的将随之而来,但在 PERSON 上是不同的。
Output like this:
ID - Place - Person
1 - London - Anna
4 - London - Nils
2 - Stockholm - Johan
试过这个:
SELECT ID, Person
FROM users
ORDER BY FIELD(Place,'London'), Person ASC "
但它给了我:
ID - Place - Person
1 - London - Anna
4 - London - Nils
3 - Gothenburg - Anna
2 - Stockholm - Johan
而且我真的不希望 Anna 或任何人多次出现在结果中。
【问题讨论】:
-
+1。这是一个看似不平凡的规范,每个
Person只返回一行;确保该行是'Place='London'行(如果存在),否则为其他行。一个规范看起来很简单,但实际实现会让你白发苍苍!不幸的是,MySQL 没有像其他 RDBMS 那样的分析函数,但一种选择是模拟“ROW_NUMBER”分析函数。执行此操作的 SQL 不是很直接。 (有关该方法的示例,请参见我的答案。) -
“伦敦 - 安娜”可以出现多次吗?
-
@Strawberry 不,整个想法是只让一个人先按一个地方对它们进行排序。然后其他人将按照 ASC 顺序跟随。
-
我的意思是在数据集中。不是结果集。
-
@Strawberry 哦。我的错。 “伦敦 - 安娜”只会出现一次。
标签: mysql sql asp-classic field sql-order-by