【发布时间】:2012-07-06 14:16:16
【问题描述】:
SQLite 版本 3.3.6
sqlite中有一个表
CREATE TABLE stats (Date TEXT , Sub TEXT , DELAY95TH INT ) ;
每一行在哪里:
Date |Sub|Delay
2012-06-25|212|750
2012-06-25|214|1180
2012-06-25|216|14902
任务是通过汇总Delay获取Sub在Top 10中的所有记录
执行此操作的 SQL:
Select
Date, Sub, Delay
from
stats
where
Sub in (select Sub
from stats
group by Sub
order by SUM(Delay) desc limit 10 ) ;
但是,它不会产生任何结果。一旦您删除“order by”子句,查询就会开始工作。
所以,例如:
select
Date, Sub, Delay
from
stats
where
Sub in (select Sub from stats group by Sub limit 10);
运行良好并产生预期的结果。
不止于此。在同一个实例中也有表:
CREATE TABLE data ( Date DATE , Sub INT, Subcont TEXT, Session INT, MsgType TEXT, Score INT);
并选择与有问题的类似,工作正常:
select
Subcont, MsgType, SUM(Score)
from
data
where
Subcont in (select Subcont
from data
group by Subcont
order by sum(Score) desc limit 10)
group by
Subcont, MsgType
order by
Subcont, MsgType;
它的作用几乎相同:通过汇总 Score 识别前 10 个 Subcont,并显示包含这些 Subcont 的所有记录。而且它有效!
【问题讨论】:
-
在您的第一个查询中,您有 ... where sub in (select sub ..);在您的第二个查询中,您有 ... where subm in (select subm ...)。这些只是拼写错误,还是您真的有两个不同的列名为 sub 和 subm?
-
这些是拼写错误。感谢您指出!现在将修复。
-
limit 子句在子查询 sqlite 中不起作用