2016-05-16 5 views
0

SELECTステートメントから予期せぬ結果が出ました。psycopg2 PSQL SELECTステートメントが0の代わりに0Lを返す

私は、次のコードを持っている:

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'は1桁ではなく、本当に大きな数字にすぎないと思った。

申し訳ありませんが、私は初心者ですので、本当に明白かもしれませんが、助けていただければ幸いです。それは助けている場合、これは、テーブルのための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""") 
関連する問題