【问题标题】:sqlite GROUP BY and ORDERsqlite GROUP BY 和 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 我已经更新了我的问题。我希望它更符合标准。

标签: android sqlite android-sqlite min having


【解决方案1】:

您可以利用SQLite's bare columnsHAVING 子句中使用条件聚合:

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 开始支持它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-28
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多