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

Sqlite 如何执行复杂的sql语句并在数组中获得结果?,sqlite,swift,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 let query = prices.select(defindex, average(price))

我希望使用执行一个相当复杂的SQL语句,并最好在数组中获得结果,以用作tableview的数据源。该声明如下所示:

SELECT defindex, AVG(price) FROM prices WHERE quality = 5 AND price_index != 0 GROUP BY defindex ORDER BY AVG(price) DESC
let query = prices.select(defindex, average(price))
                  .filter(quality == 5 && price_index != 0)
                  .group(defindex)
                  .order(average(price).desc)
let rows = Array(query)
我正在研究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,它将如下所示:

SELECT defindex, AVG(price) FROM prices WHERE quality = 5 AND price_index != 0 GROUP BY defindex ORDER BY AVG(price) DESC
let query = prices.select(defindex, average(price))
                  .filter(quality == 5 && price_index != 0)
                  .group(defindex)
                  .order(average(price).desc)
let rows = Array(query)

我没有提到“性能”方面,因为我不确定您看到了什么样的性能问题。我不知道您可以将语句强制转换到数组中,所以我认为您需要迭代来创建数组(因为您的示例中有一个循环)。非常感谢。如果我有多个过滤器,例如大小和颜色,如果列颜色我有以下选项(全部、蓝色、黑色和黄色),并且在db中列颜色只有蓝黑和黄色,该怎么办。如何创建动态筛选器?@edse您可以创建并保留“基本”查询的引用,并在其更改时应用相应的筛选器。我会发布示例代码,但不会在注释中格式化。不过,如果你仍然需要帮助,请随时提出新问题。