2014-03-19 4 views
1

저는 python 2.7.6과 sqlite 3.3.6을 사용하고 있습니다. INT 열이있는 테이블이 있습니다. 열 위에 max() 또는 min()을 선택하면 행의 일부 난수가 반환되며 이는 최소 또는 최대 값이 아닙니다. 나는이 동작을 재현하려고 시도했다. 수동으로 테이블을 만들고 같은 값을 삽입했다. min과 max는 완벽하게 작동했다. 그러나, 내 스크립트 후, 수동 쿼리 테이블 이상한 결과를 다시 제공합니다. 여기 int 열의 이상한 최대 최소 결과

내가 테이블을 채우기 위해 sqlite가에서 executemany 방법을 사용하여 테이블 문

CREATE TABLE customer_score (DATE INT , SPAUBM INT , "CUSTOMER" TEXT, "SCORE" INT) 

을 만드는 것입니다.

sqlite> select * from customer_score where customer='AAA' and date in (20140219); 
20140219|9214|AAA|5017262 
20140219|9213|AAA|3409363 
20140219|9207|AAA|2288238 
20140219|9208|AAA|809365 

sqlite> select max(score) from customer_score where customer='AAA' and date in (20140219); 
809365 

sqlite> select min(score) from customer_score where customer='AAAL' and date in (20140219); 
2288238 

가 그 executemany 방법 나사 가입 INT 같을 수 여기

cursor.executemany("INSERT INTO customer_score VALUES (?, ?, ? , ?)", list_to_put) 

은이 문제의 파일 테이블에

4203 6JASTYMPT 987335 

예를 넣고, 행의 예는 어떻게 든 테이블에 삽입하기 전에 데이터?

어떻게 확인할 수 있습니까?

UPDATE

SQLite는 설명서 MIN()MAX()ORDER BY LIMIT 1에 shorcut 것을 말한다. 제 경우에는 ORDER BY가 예상대로 작동하지 않습니다. 행 위치는 완전히 무작위로 보입니다.

sqlite> select * from customer_score where customer='AAA' and date in (20140218, 20140219) order by score desc ; 
20140219|9208|AAA|809365 
20140218|9208|AAA|629937 
20140219|9214|AAA|5017262 
20140218|9214|AAA|3911855 
20140219|9213|AAA|3409363 
20140219|9207|AAA|2288238 
20140218|9213|AAA|2127092 
20140218|9207|AAA|1489895 

답변

3

score 열의 값은 숫자가 아니며 문자열입니다.

list_to_put의 값이 실제로 숫자 여야합니다.

(즉, SQLite는 거의 ignores the column data type을 유의하시기 바랍니다, 당신이 INT 또는 TEXT 또는 FLUFFY BUNNIES로 선언 여부는 중요하지 않습니다.)

+0

감사합니다! 나는 이것을 확인하지 않았다. 나는 INT 형식의 문자열 형식의 숫자로 sqlite를 피드하면 자동으로 INT로 변환되거나 예외를 throw합니다. 날짜에 대해서는 형식이 YYYYMMDD가 되 자마자 날짜를 숫자로 비교할 수 있습니다. 그 이유는 내가 INT로 유지하는 이유입니다. –