web2py选择不同的值

时间:2015-10-16 17:26:38

标签: select web2py distinct-values

我有一个像col1,col2,col3,col4,col5这样的表。我想选择col3的不同值,我的查询如下所示:

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

查询失败。

2 个答案:

答案 0 :(得分:2)

除非使用@Anthony提到的postgresql,否则对于所有其他关系数据库(afaik),distinct不能应用于结果集的各个字段,除了所有字段。 Web2py将其与参数使用相关联。这可以设置为True,或者设置为所有请求的字段。正如书中所示,我引用了相关内容以方便您使用。

如果您使用sqlite,请使用Anthony提及的groupby并应用聚合,例如:db().select(db.table.col1.max(), db.table.col3.max(), groupby=db.table.col3)

希望这会有所帮助。

从web2py手册aggregates section

  

不同

     

使用参数distinct = True,您可以指定只想选择不同的记录。这与使用所有指定字段进行分组具有相同的效果,除了它不需要排序。当使用distinct时,重要的是不要选择所有字段,特别是不要选择“id”字段,否则所有记录将始终是不同的。

     

以下是一个例子:

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

亚历
  鲍勃
  卡尔
  请注意,distinct也可以是表达式,例如:

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

亚历
  鲍勃
  卡尔

答案 1 :(得分:0)

如果将distinct设置为表达式(例如Field对象),则会生成DISTINCT ON SQL语句,我相信SQLite不支持该语句。它应该在PostgreSQL中工作。作为替代方案,您可以尝试:

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

但是,无论哪种方式,您可能会遗漏一些col1的不同值,因为您没有进行任何聚合。