2016-05-16 28 views
0

我的SELECT語句有意外的結果。psycopg2 PSQL SELECT語句返回0L而不是0

我有以下代碼:

db_cursor.execute("""SELECT player.player_id, player.player_name, 
         COUNT(match.winner_id) as wins, COUNT(match.loser_id + match.winner_id) as total_matches 
         FROM player LEFT JOIN match ON player.player_id = match.winner_id 
         GROUP BY player.player_id 
         ORDER BY wins ASC""") 
results = db_cursor.fetchall() 
print results 

,我得到下面的輸出,當我打印。

[(317, 'Bruno Walton', 0L, 0L), (318, "Boots O'Neal", 0L, 0L), (319, 'Cathy Burton', 0L, 0L), (320, 'Diane Grant', 0L, 0L)] 
[(318, "Boots O'Neal", 0L, 0L), (320, 'Diane Grant', 0L, 0L), (317, 'Bruno Walton', 1L, 1L), (319, 'Cathy Burton', 1L, 1L)] 

什麼是0L和1L?我認爲'L'只適用於非常大的數字,而不是一個數字。

對不起,我是初學者,所以它可能是非常明顯的,但任何幫助,將不勝感激。如果有幫助,這是對錶的PSQL:

CREATE TABLE IF NOT EXISTS player 
(player_id SERIAL PRIMARY KEY, player_name TEXT); 

CREATE TABLE IF NOT EXISTS match 
(match_id SERIAL PRIMARY KEY, winner_id INTEGER references player(player_id), 
loser_id INTEGER references player(player_id)); 

回答

0

可以轉換運算符添加到查詢即COUNT(match.winner_id):: int和COUNT(match.loser_id + match.winner_id):: INT。否則,您將不得不在結果集中投射該列。

db_cursor.execute("""SELECT player.player_id, player.player_name, 
         COUNT(match.winner_id)::int as wins, COUNT(match.loser_id + match.winner_id)::int as total_matches 
         FROM player LEFT JOIN match ON player.player_id = match.winner_id 
         GROUP BY player.player_id 
         ORDER BY wins ASC""")