我有一個表,如col1,col2,col3,col4,col5。我想選擇col3的不同值,我的查詢如下所示:web2py選擇不同的值
db().select(db.table.col1, db.table.col3, distinct=db.table.col3)
查詢失敗。
我有一個表,如col1,col2,col3,col4,col5。我想選擇col3的不同值,我的查詢如下所示:web2py選擇不同的值
db().select(db.table.col1, db.table.col3, distinct=db.table.col3)
查詢失敗。
如果將distinct
設置爲一個表達式(例如Field對象),則會產生DISTINCT ON
SQL語句,我認爲SQL語句不支持該語句。但它應該在PostgreSQL中工作。作爲替代方案,你可以嘗試:
db().select(db.table.col1, db.table.col3, groupby=db.table.col3)
無論哪種方式,不過,你可能會丟失一些col1
不同的值,因爲你沒有做任何的聚集。
除了可能在使用@Anthony提到的postgresql時,對於所有其他關係數據庫(afaik)而言,distinct不能應用於結果集的各個字段部分,除此之外的所有字段。 Web2py在參數使用中將其解釋出來。這可以設置爲True,或者設置爲所有請求的字段。正如本書中所引用的,爲了您的方便,我引用了相關內容。
如果你使用SQLite使用groupby
由安東尼提到並申請聚集例如:db().select(db.table.col1.max(), db.table.col3.max(), groupby=db.table.col3)
希望這有助於。
從web2py的手冊,aggregates section:
不同
隨着說法截然不同=真,你可以指定你只需要選擇不同的記錄。這與使用所有指定字段進行分組的效果相同,只是它不需要排序。當使用不同的時候,不要選擇所有字段,尤其是不要選擇「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
亞歷
鮑勃
卡爾
謝謝大家。 groupby爲我工作。 – user3066910
堆棧溢出歡迎:)請與如何提出一個很好的問題familiraize自己。請在你的問題中使用格式。向我們提供關於failes意味着什麼的更詳細的信息 – DawidPi