A 17-year-old Latvian national swung out at passersby in the Swiss village of Flums before fleeing in a stolen car.
The unnamed attacker crashed and was chased on foot to a petrol station where he attacked motorists before being felled by an armed cop.
He was taken to hospital with a gunshot wound and later arrested.
A police spokesman said several people were injured when the teen lashed out with a hatchet at a post office at around 8pm.
Local reports said he attacked a family including a young baby, according to Sudostschweiz.
The suspect appeared to have been a lone assailant and there was no indication of any terrorist background, police said.
There was no other information on a possible motive.