The school in La Loche was on lockdown for most of the afternoon, and Royal Canadian Mounted Police urged parents to stay away while they responded to the yesterday's "ongoing serious incident."
A nearby elementary school was also shuttered "as a precaution," a federal police spokeswoman told AFP.
The school shooting is the deadliest in 26 years in Canada.
Prime Minister Justin Trudeau, speaking in Davos, Switzerland, where he was attending the World Economic Summit, said: "There was a shooting in the community, five people were killed (and) two others are in critical condition."
More From This Section
"We all grieve with and stand with the community of La Loche and all of Saskatchewan on this terrible tragic day," Trudeau added.
Earlier, students told public broadcaster CBC they heard six or seven shots ring out at around 1:00 pm (local time).
Several patients were being treated for gunshot wounds in the remote northern town's hospital, the broadcaster added.
Several witnesses reported seeing a "boy," who was either a student or formerly attended the school, opening fire inside the building.
"I ran outside the school," Noel Desjarlais, a Grade 10 student at the school, told CBC. "There was lots of screaming. There was about six, seven shots before I got outside. I believe there was more shots by the time I did get out."
La Loche is a community of 2,500 about 600 kilometers (375 miles) north of Saskatoon. Residents are mostly aboriginal.
Lawmaker Georgina Joliebois, who was also once the mayor of La Loche, said she was "shocked and saddened by the shooting."
"The shooting hits close to home for me as my family members attend the school," Joliebois said.
Saskatchewan Premier Brad Wall also expressed "shock and sorrow at the horrific events," adding that the province was preparing to send up "crisis support" to the community.