我想使用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对象,但这不是最佳的性能。
任何帮助都将不胜感激。
答案 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)