Home > Blockchain >  sqlite GROUP BY and ORDER
sqlite GROUP BY and ORDER

Time:11-14

Is it possible to get value from column path (a string) where column status (string) is "REC", else if status="INFO", ... ?

SELECT status, count(idFileRemote), 
round(avg(rating), 2) AS rating, 
album, coverhash, path 
FROM tracks 
GROUP BY album  

Ex: If I have

status   Album  Path
------   -----  -----
INFO     foo    path1
REC      foo    path2
OTHER    foo    path3

INFO     bar    path91
OTHER    bar    path93

I would get

status   Album  Path
REC      foo    path2
INFO     bar    path91

CodePudding user response:

You can utilize SQLite's bare columns to use conditional aggregation in the HAVING clause:

SELECT *
FROM tracks
GROUP BY Album
HAVING MIN(CASE status WHEN 'REC' THEN 1 WHEN 'INFO' THEN 2 ELSE 3 END);

See the demo.

Note that this problem would be typically solved with window functions, but I don't use them in my query because Android supports them only since API version 30.

  • Related