Seven people were injured -- five women and two men, one of whom is in a serious condition, said Swiss media on Monday. A baby was also hurt falling from a pram.
Police in the canton of St Gallen said the 17-year-old Latvian national carried out the attack on Postplatz near the post office in the northeast town of Flums.
Several people were wounded in the initial attack before the assailant "fled with a stolen car and had an accident", police said in a statement.
The attacker later injured several people inside a petrol station shop, where he was shot by police and apprehended.
"At this stage, there is no evidence of a link to terrorism", added spokesman Krusi Hanspeter, noting that police were continuing to gather information about the assailant.
Police said the severity of the injuries suffered by the victims was not immediately clear.
According to Blick, police later raided a house in the area as part of the investigation.