Fees are calculated by adding the number of the unspent inputs used then multiplied by how much fees you would use with each unspent inputs.
So, in other words, fees are calculated in satoshi per Byte (sat/B) or satoshi per kByte (sat/kB). And there is 3 kind of fees: lower fees (for low transaction's confirmation), medium fees and higher fees (for fast transaction's confirmation).
Actually with the huge number of bitcoin transaction every day and with the fact that the block size is limited to 1MB, for now. The miners will pick the transactions with higher fees and include them to their blocks and leave the others transactions for other miners to include them in their blocs if they found any. You can look in this website in order to have an idea about how much fees miners are including in their blocks and within how much blocks your transaction will be confirmed (an approximation)
However, if you're looking for a wallet that uses the lower fees, you can do it in most of wallets (i don't know if coinbase support it or not, but blockchain.info and many others support it) by modifying the fees of your transaction before sending it. But, changing the fees to a small ones will have a huge impact in your transactions confirmations. Actually, blockchain.info uses the medium fees (about 120 sat/B) and users are stuck with their transactions for many days untill they reach one confirmation.