Australian Michael Matthews (Orica-Scott) took third place.
Colombian Rigoberto Uran, who finished second overall in the Tour de France in July, attacked from the main pack with two kilometres left, hoping to repeat his 2015 win.
But the Cannondale-Drapac rider was reined in and Sagan won the final sprint comfortably.
News that makes sense
Your trusted source for staying up-to-date with the world around you. Get free daily news updates and analysis, straight to your inbox.
The Grand Prix de Quebec is followed by the Grand Prix de Montreal on Sunday.
(Reporting by Julien Pretot; Editing by Hugh Lawson)
