我有一个表,如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