sqlite GROUP BY 和 ORDER
Posted
技术标签:
【中文标题】sqlite GROUP BY 和 ORDER【英文标题】:sqlite GROUP BY and ORDER 【发布时间】:2021-12-24 19:33:47 【问题描述】:是否可以从列状态(字符串)为“REC”的列路径(字符串)中获取值,否则如果 status="INFO", ...?
SELECT status, count(idFileRemote),
round(avg(rating), 2) AS rating,
album, coverhash, path
FROM tracks
GROUP BY album
例如:如果我有
status Album Path
------ ----- -----
INFO foo path1
REC foo path2
OTHER foo path3
INFO bar path91
OTHER bar path93
我会得到
status Album Path
REC foo path2
INFO bar path91
【问题讨论】:
给我的问题一个-1的人,你能告诉我为什么这样我可以相应地更新它吗?谢谢 巧合的是,您的查询与“DB Browser for SQLite”配合得很好。在您group by album
返回的所有未聚合列值的查询中:状态、覆盖哈希和路径是任意的。编辑您的问题并详细解释您希望查询返回的内容,更好地使用示例数据和预期结果。
@forpas 我已经更新了我的问题。我希望它更符合标准。
【参考方案1】:
您可以利用SQLite's bare columns 在HAVING
子句中使用条件聚合:
SELECT *
FROM tracks
GROUP BY Album
HAVING MIN(CASE status WHEN 'REC' THEN 1 WHEN 'INFO' THEN 2 ELSE 3 END);
请参阅demo。
请注意,此问题通常可以通过窗口函数解决,但我不会在查询中使用它们,因为 android 仅从 API 版本 30 开始支持它们。
【讨论】:
以上是关于sqlite GROUP BY 和 ORDER的主要内容,如果未能解决你的问题,请参考以下文章
将使用 GROUP BY 的查询从 MySQL 转换为 Postgres 和 SQLite
Sqlite Android order by & group_concat
SQLite - 是不是可以在同一个查询中使用 group_concat 函数但 'GROUP BY' 不同的标准?