2016-05-16 58 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""")