РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
445 of 711 menu

Функция distinct

Функция distinct применяет к запросу оператор DISTINCT, который удаляет дублирующиеся строки из результата выборки. Функция не принимает обязательных параметров и может вызываться как без аргументов, так и с выражением, по которому нужно проверять уникальность. Чаще всего distinct используется в связке с методом select для построения SQL-запросов.

Синтаксис

select(...).distinct() select(distinct(column))

Пример

Давайте создадим таблицу articles, заполним ее данными с повторяющимися значениями и применим distinct к колонке status:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('status', String), ) metadata.create_all(engine) with engine.begin() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article 1', 'status': 'published'}, {'id': 2, 'title': 'article 2', 'status': 'draft'}, {'id': 3, 'title': 'article 3', 'status': 'published'}, {'id': 4, 'title': 'article 4', 'status': 'draft'}, ]) res = conn.execute( select(articles.c.status).distinct() ) for row in res: print(row)

Результат выполнения кода:

('published',) ('draft',)

Пример

Давайте посмотрим итоговый SQL-запрос, который строит SQLAlchemy при вызове distinct:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('status', String), ) metadata.create_all(engine) query = select(articles.c.status).distinct() print(query)

Итоговый SQL запрос:

SELECT DISTINCT articles.status FROM articles

Пример

Давайте применим distinct к нескольким колонкам сразу и посчитаем уникальные комбинации значений:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('status', String), ) metadata.create_all(engine) with engine.begin() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article 1', 'status': 'published'}, {'id': 2, 'title': 'article 1', 'status': 'published'}, {'id': 3, 'title': 'article 2', 'status': 'draft'}, {'id': 4, 'title': 'article 2', 'status': 'draft'}, ]) res = conn.execute( select(articles.c.title, articles.c.status).distinct() ) for row in res: print(row)

Результат выполнения кода:

('article 1', 'published') ('article 2', 'draft')

Смотрите также

  • функцию func.count,
    которая считает количество строк в выборке
  • функцию asc,
    которая задает сортировку по возрастанию
  • функцию desc,
    которая задает сортировку по убыванию
  • функцию label,
    которая задает псевдоним для колонки результата
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить