A tight 90-degree degree corner inside the last kilometre put paid to the Manxman’s fading hopes as Sagan romped away to a convincing victory ahead of Jurgen Roelandts and Alexander Kristoff.
Cavendish’s teammates took to the front of the peloton in the final stages, with the Brit tucked behind race leader Thibaut Pinot in the group.
The Etixx train suffered a major setback when Zdenek Stybar slid out in the rain, taking one teammate with him and holding up the peloton in the treacherous conditions.
World champion Michal Kwiatkowski took up the lead but as the stage neared its conclusion Etixx found themselves outnumbered by Tinkoff-Saxo riders Cavendish was forced to scramble for position.
The four-man break was finally reeled in with 1,500m to go, but the bunch split when navigating a roundabout, leaving several sprinters out of contention.
Cavendish remained in the small front group which strung out as it reached the tight final right turn. Rounding the corner towards the front of the reduced bunch Sagan had the speed to power away as the remaining sprint fizzled out.
Geraint Thomas finished 11th, gaining five seconds back on leader Pinot, who retains the yellow jersey.
Tour de Suisse 2015 stage six: Wil-Biel/Bienne (193.1km)
1. Peter Sagan (Svk) Tinkoff-Saxo, 4-34-43
2. Jurgen Roelandts (Bel) Lotto-Soudal, st
3. Alexander Kristoff (Nor) Katusha, st
4. Jean-Pierre Drucker (Lux) BMC, st
5. Daniele Bennati (Ita) Tinkoff-Saxo, st
6. Mark Cavendish (GBr) Etixx-Quick-Step, at 2 seconds
7. Tom Van Asbroeck (Bel) LottoNL-Jumbo, st
8. Alexey Lutsenko (Kaz) Astana, st
9. Borut Bozic (Slo) Astana, st
10. Jakob Fuglsang (Den) Astana, st
11. Geraint Thomas (GBr) Team Sky, at 2 seconds
Overall classification after stage six
1. Thibaut Pinot (Fra) FDJ, 17-42-07
2. Geraint Thomas (GBr) Team Sky, at 42s
3. Simon Spilak (Slo) Katusha, at 50 seconds
4. Domenico Pozzovivo (Ita) Ag2r-La Mondiale, at 55 seconds
5. Miguel Angel Lopez (Esp) Astana, at 1-07
6. Jakob Fuglsang (Den) Astana, at 1-22
7. Tom Dumoulin (Ned) Giant-Alpecin, at 1-32
8. Steve Morabito (Swi) FDJ, at 2-29
9. Sebastian Reichenback (Swi) IAM Cycling, at 2-43
10. Sergio Henao (Col) Team Sky, at 2-46