如何执行复杂的sql语句并在数组中获取结果?

时间:2015-05-01 11:46:02

标签: sqlite swift sqlite.swift

我想使用SQLite.swift执行一个相当复杂的SQL语句,并将结果最好放在一个数组中,以用作tableview的数据源。声明如下:

SELECT defindex, AVG(price) FROM prices WHERE quality = 5 AND price_index != 0 GROUP BY defindex ORDER BY AVG(price) DESC

我正在研究SQLite.swift文档以证明如何正确地完成它,但我找不到方法。我可以在数据库上调用prepare并遍历Statement对象,但这不是最佳的性能。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:7)

通过简单地将序列本身包装在一个数组中,可以将Swift中的大多数序列解压缩到数组中:

let stmt = db.prepare(
    "SELECT defindex, AVG(price) FROM prices " +
    "WHERE quality = 5 AND price_index != 0 " +
    "GROUP BY defindex " +
    "ORDER BY AVG(price) DESC"
)
let rows = Array(stmt)

此时构建数据源应该相对简单。

如果您使用类型安全的API,它将如下所示:

let query = prices.select(defindex, average(price))
                  .filter(quality == 5 && price_index != 0)
                  .group(defindex)
                  .order(average(price).desc)
let rows = Array(query)