﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
10574	Remove unnecessary ordering in values() queries	Malcolm Tredinnick	Malcolm Tredinnick	"The ORM applies any ordering (such as default ordering given by `Meta.ordering`) all the time. For this model:
{{{
#!python
class Item(models.Model):
    name = models.CharField(max_length=10)
    data = models.IntegerField()

    class Meta:
        ordering = [""name""]
}}}

This is redundant in `values()` queries like this:
{{{
#!python
Item.objects.values(""data"")
}}}

Even worse, it leads to incorrect results in aggregate queries like this one:
{{{
#!python
Item.objects.values(""data"").annotate(Count(""id""))
}}}

Normally, that would return the number of entries for each data value. However, due to the ordering by name being included, we group by (data, name), which affects the result. The solution is to realise that the ordering columns aren't going to feature in the result and remove them.

It can be worked around, once you realise the problem, although that last part isn't easy (it took me more than a few minutes):
{{{
#!python
Items.objects.values(""data"").annotate(Count(""id"")).order_by()
}}}

but Django has enough information to work this out itself.

(I'm going to put this in the aggregation category, since that's where the real apparent bug emerges and people will be looking there for similar things, I guess.)"		closed	Database layer (models, ORM)	dev		fixed			Accepted	0	0	0	0	0	0
