That was my main complaint since day one.
I still play online every now and then, but it's really discouraging when you're not a pro. Most of the times, I cannot even finish the race, because the more expert players finish like a minute before everyone else. It depends of course of how good the players on your lobby are, but usually there's 3-4 really good players. And the amount of coins you get depends of the position you end up, and the track (easier tracks give you less coins than the most difficult/longer tracks).
There's also the fact that, at least for me, it takes forever to start an online race, between the server issues and people leaving the lobbies right when the races are about to start. I don't have a lot of time to play daily, so that really makes me thinks twice before going online.
The GP challenges though, only have a few ones that require online play, but you're ok if you don't do those (like finishing at #1 online with a certain character or kart, etc). Others are pretty doable, like hitting an online player with an item, independently of what position you finish at. Most of them require you to finish a certain track (which can be offline) with a certain character, doing some tricks, grabbing a required amount of crystals (battle mode) finishing a track under a certain time, etc.
Depending of how much you play, whether online or offline, you can get a considerable amount of coins to buy a couple of skins per week. Some people in here say they have no trouble, I'm more on the side that struggles to get the coins. In the worst case scenario, you can buy them with real money, but I don't think it's necessary if you're a casual player (or a super hardcore that plays all day).