On Sun, Mar 21, 2010 at 9:19 PM, liubin liu <7101...@sina.com> wrote: > > > my application is like below. To get 2 records after a special records. But > wrong count, the count is 5: > sqlite> > sqlite> CREATE TABLE t1 (id INTEGER PRIMARY KEY, data INTEGER); > sqlite> INSERT INTO t1 VALUES (3, 999); > sqlite> INSERT INTO t1 VALUES (2, 989); > sqlite> INSERT INTO t1 VALUES (4, 1009); > sqlite> INSERT INTO t1 VALUES (7, 1019); > sqlite> INSERT INTO t1 VALUES (9, 1029); > sqlite> INSERT INTO t1 VALUES (10, 1039); > sqlite> SELECT * FROM t1 WHERE id>=3 LIMIT 2; # right > 3|999 > 4|1009 > sqlite> SELECT COUNT(*) FROM t1 WHERE id>=3 LIMIT 2; # wrong count, why? > 5 > sqlite> > > > ____________________________________________ > > I'm confused that the "count(*)" return wrong count. >
Read the docs -- "The LIMIT clause places an upper bound on the number of rows returned in the result." You are confused about what Count(*) is returning. Count(*) is not returning the number of rows in your result set. It is returning the number of rows that match your WHERE clause, and that answer itself takes up only one row. The LIMIT keyword, on the other hand, is limiting the number of rows in your result set. Since the LIMIT clause is limiting the answer to 2 rows, but the answer itself consists of only one row, the LIMIT clause is pointless. -- Puneet Kishor http://www.punkish.org Carbon Model http://carbonmodel.org Charter Member, Open Source Geospatial Foundation http://www.osgeo.org Science Commons Fellow, http://sciencecommons.org/about/whoweare/kishor Nelson Institute, UW-Madison http://www.nelson.wisc.edu ----------------------------------------------------------------------- Assertions are politics; backing up assertions with evidence is science ======================================================================= _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users