我认为以下可能适合:-
SELECT
CASE
WHEN seconds > 0 AND seconds < 300
THEN 'Playlist OK'
ELSE 'Playlist too long or not long enough'
END AS result
FROM
(SELECT sum((substr(length,1,2) * 60) + substr(length,4,2)) as seconds
FROM songs);
测试
这是使用以下方法测试的:-
DROP TABLE IF EXISTS songs;
CREATE TABLE IF NOT EXISTS songs ("Song Name" TEXT,"Artist" TEXT, "Genre" TEXT, "Album" TEXT, "Year", length TEXT);
INSERT INTO songs VALUES ('My Song','Fred','Rock','Fred Rocks','1974', '03:11');
INSERT INTO songs VALUES ('Another Song','Bert','Pop','Bert sings','2010', '02:59');
SELECT
CASE WHEN seconds > 0 AND seconds < 300 THEN 'Playlist OK' ELSE 'Playlist too long or not long enough' END AS result
FROM (SELECT sum((substr(length,1,2) * 60) + substr(length,4,2)) as seconds FROM songs)
然后:-
- a) 注释掉所有插入(歌曲),
- b) 注释掉第一首歌,
- c) 注释掉第二首歌和
- d) 不评论任何歌曲
测试结果
- a) 播放列表太长或不够长
- b) 播放列表正常
- c) 播放列表正常
- d) 播放列表太长或不够长
如果您还想要以秒为单位的时间,那么:-
SELECT seconds,
CASE
WHEN seconds > 0 AND seconds < 300
THEN 'Playlist OK'
ELSE 'Playlist too long or not long enough'
END AS result
FROM
(SELECT sum((substr(length,1,2) * 60) + substr(length,4,2)) as seconds FROM songs);
- 请注意,如果没有行,则 seconds 将为 null 而不是 0。
重新评论:-
这不是我想要的。而不是说如果
播放列表低于某个时间或其他什么。我希望它显示所有
可以加在一起的歌曲,无需经过用户输入
我相信以下会做到这一点(最后一行的 1000 是时间限制):-
SELECT *
FROM
(
SELECT SUM(a.seconds) AS summed,
b."Song Name",
b."Artist",
b."Genre",
b."Album",
b."Year",
b.length,
b.seconds
FROM (
SELECT *,
(substr(length,1,2) * 60) + substr(length,4,2) AS seconds
FROM songs ORDER BY length) AS a,
(
SELECT *,
(substr(length,1,2) * 60) + substr(length,4,2) AS seconds
FROM songs ORDER BY length) AS b
WHERE b."Song Name" <= a."Song Name"
GROUP BY b."Song Name" ORDER BY summed
)
WHERE summed <= 1000
根据表格:-
运行上述结果:-
限制 = 1000 :-
限制 = 10000 :-
限制 = 600 :-