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的主要内容,如果未能解决你的问题,请参考以下文章

SQLITE 每月使用 SUM 查询 GROUP BY

将使用 GROUP BY 的查询从 MySQL 转换为 Postgres 和 SQLite

Sqlite Android order by & group_concat

SQLite - 是不是可以在同一个查询中使用 group_concat 函数但 'GROUP BY' 不同的标准?

在 SQLite 的 GROUP_CONCAT 函数中使用 ORDER BY 子句

在 SQLite 中有效的 SQL Group By 在 Postgres 中无效