Вам необходимо сначала упорядочить по номеру вхождения desc
и по номеру строки по asc
.
select name,rn
from
(
select name,row_number() over(partition by name order by name) rn ,
count(*) over(partition by name) ct
from tbl_dup
) a
order by ct desc, rn asc
Да, порядок имеет значение, как отметили другие.
Тем не менее, столкновение с этой проблемой почти всегда будет свидетельством того, что вы делаете что-то не так.
В этом случае ваше заявление:
cities = City.objects.filter(zip=self).distinct()
... является избыточным и плохой практикой. Вы можете найти города, связанные с почтовым индексом, ссылаясь на city_set этого почтового индекса в своих представлениях (т.е. не в вашей модели!). Поэтому, если zip является экземпляром ZipCode, вы должны сделать:
cities = zip.city_set.all()
Если вы действительно хотите называть его «города», а не «city_set», вы можете использовать параметр related_name в объявлении m2m.
Помимо проблем порядка, это неправильно:
cities = City.objects.filter(zip=self).distinct()
Он не внутри метода, поэтому «я» также будет неопределенным. Он выполняется только один раз, во время создания класса (т.е. когда модуль впервые импортируется), поэтому созданный атрибут будет атрибутом класса и будет иметь одинаковое значение для всех экземпляров. То, что вы могли бы искать, это:
@property
def cities(self):
return City.objects.filter(zip=self).distinct()
Поскольку это внутри метода, который не выполняется до тех пор, пока к нему нет доступа, проблемы с заказом больше не будут проблемой. Как указывает Озан, это дублирование того, что обратные отношения в Django уже дают вам бесплатно:
a_zip_code.city_set.all()
И вы можете использовать related_name, чтобы называть его так, как вам нравится:
zip = models.ManyToManyField(ZipCode, related_name='cities')
...
a_zip_code.cities.all()
Так что я не думаю, что проблема заказа, которую вы изначально задавали о даже имеет отношение к вашей ситуации. Когда он является,
Когда-то я беспокоился о заказе ... потому что я думал, что мои модели ниже могут ссылаться только на модели выше. Но потом понял, что можно просто сделать
models.ForeignKey('appName.modelName')
и все было хорошо.
Когда у вас есть ссылки на классы, определенные после, вы можете использовать этот трюк:
attribute = models.ForeignKey('ClassDefinedAfterThis')
Порядок имеет значение в Python. Эта тема может иметь отношение к вашему вопросу. Также для ваших нужд вы можете использовать уникальный внешний ключ в классе почтового индекса.
Да, порядок имеет значение, но ваш пример мне не подходит. Я думаю, что вы должны просто использовать внешний ключ для ваших отношений «многие к одному»:
cities = models.ForeignKey(City)
Здесь есть подробности по отношениям «многие к одному» с моделями django.
Редактировать:
Мне было указано в комментариях, что в городах Европы может быть несколько городов с одинаковым почтовым индексом. Если вы ищете здесь отношение «многие ко многим», вы должны использовать:
cities = models.ManyToManyField(City)
Это описано в документации Django . Дело в том, что любой из этих примеров гораздо более понятен, чем то, что используется в этом примере.