Explain the difference between window functions like RANK(), DENSE_RANK(), and ROW_NUMBER(), and provide a scenario where each is appropriate.