Fixed #24767 -- Added Greatest and Least expressions

Greatest and Least are row-level Function versions of Min and Max.
This commit is contained in:
Ian Foote 2015-05-09 12:55:03 +01:00 committed by Marc Tamlyn
parent fe21fb810a
commit 4ab53a558a
7 changed files with 326 additions and 3 deletions

View file

@ -82,6 +82,74 @@ Usage example::
>>> print(author.screen_name)
Margaret Smith (Maggie)
Greatest
--------
.. versionadded:: 1.9
.. class:: Greatest(*expressions, **extra)
Accepts a list of at least two field names or expressions and returns the
greatest value. Each argument must be of a similar type, so mixing text and numbers
will result in a database error.
Usage example::
class Blog(models.Model):
body = models.TextField()
modified = models.DateTimeField(auto_now=True)
class Comment(models.Model):
body = models.TextField()
modified = models.DateTimeField(auto_now=True)
blog = models.ForeignKey(Blog)
>>> from django.db.models.functions import Greatest
>>> blog = Blog.objects.create(body='Greatest is the best.')
>>> comment = Comment.objects.create(body='No, Least is better.', blog=blog)
>>> comments = Comment.objects.annotate(last_updated=Greatest('modified', 'blog__modified'))
>>> annotated_comment = comments.get()
``annotated_comment.last_updated`` will be the most recent of
``blog.modified`` and ``comment.modified``.
.. warning::
The behavior of ``Greatest`` when one or more expression may be ``null``
varies between databases:
- PostgreSQL: ``Greatest`` will return the largest non-null expression,
or ``null`` if all expressions are ``null``.
- SQLite, Oracle and MySQL: If any expression is ``null``, ``Greatest``
will return ``null``.
The PostgreSQL behavior can be emulated using ``Coalesce`` if you know
a sensible minimum value to provide as a default.
Least
--------
.. versionadded:: 1.9
.. class:: Least(*expressions, **extra)
Accepts a list of at least two field names or expressions and returns the
least value. Each argument must be of a similar type, so mixing text and numbers
will result in a database error.
.. warning::
The behavior of ``Least`` when one or more expression may be ``null``
varies between databases:
- PostgreSQL: ``Least`` will return the smallest non-null expression,
or ``null`` if all expressions are ``null``.
- SQLite, Oracle and MySQL: If any expression is ``null``, ``Least``
will return ``null``.
The PostgreSQL behavior can be emulated using ``Coalesce`` if you know
a sensible maximum value to provide as a default.
Length
------