2015-10-16 4 views
0

У меня есть таблица типа col1, col2, col3, col4, col5. Я хочу выбрать различные значения col3, и мой запрос выглядит следующим образом:web2py выбрать различные значения

db().select(db.table.col1, db.table.col3, distinct=db.table.col3) 

Запрос не выполняется.

+0

Добро пожаловать на переполнение стека :) пожалуйста familiraize себя с тем, как задать хороший вопрос. Пожалуйста, также используйте форматирование в своих вопросах. Сообщите нам более подробную информацию о том, что делает неудачи. – DawidPi

ответ

0

Если вы установили distinct в выражение (например, объект Field), это приведет к оператору SQL DISTINCT ON, который, как мне кажется, не поддерживается в SQLite. Однако он должен работать в PostgreSQL. В качестве альтернативы, вы можете попробовать:

db().select(db.table.col1, db.table.col3, groupby=db.table.col3) 

В любом случае, хотя, возможно, отсутствуют некоторые различные значения col1, так как вы не делаете какой-либо агрегации.

0

За исключением, может быть, при использовании postgresql, как упоминалось в @Anthony, для всех других реляционных баз данных (afaik) отдельные не могут применяться к отдельным полям части набора результатов, кроме всех полей. Web2py отбирает это при использовании параметра. Для этого может быть установлено значение True или для всех запрошенных полей. Как и в книге, из которой я привел соответствующие для вашего удобства.

Если вы используете SQLite Используйте groupby, как упомянуто Энтони и применять заполнители, например: db().select(db.table.col1.max(), db.table.col3.max(), groupby=db.table.col3)

Надеется, что это помогает.

Из инструкции web2py, aggregates section:

отчетливый

С аргументом отчетливым = True, вы можете указать, что вы хотите выбрать только отдельные записи. Это имеет тот же эффект, что и группировка с использованием всех указанных полей, за исключением того, что не требует сортировки. При использовании разметки важно не выбирать ВСЕ поля и, в частности, не выбирать поле «id», иначе все записи всегда будут отличаться.

Вот пример:

>>> for row in db().select(db.person.name, distinct=True): 
     print row.name 

Алекс
Боб
Карл
Обратите внимание, что различные также может быть выражением, например:

>>> for row in db().select(db.person.name,distinct=db.person.name): 
    print row.name 

Alex
Боб
Карл

+0

спасибо всем. groupby работал для меня. – user3066910

Смежные вопросы