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

最佳答案

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)

09-26 13:57