Найдите второе место по зарплате в каждом отделе, используя rank / density_rank в улье

public double distance(Double latitude, Double longitude, double e, double f) {
        double d2r = Math.PI / 180;

        double dlong = (longitude - f) * d2r;
        double dlat = (latitude - e) * d2r;
        double a = Math.pow(Math.sin(dlat / 2.0), 2) + Math.cos(e * d2r)
                * Math.cos(latitude * d2r) * Math.pow(Math.sin(dlong / 2.0), 2)
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        double d = 6367 * c;
                return d;

    }
3
задан Vaibhav 18 March 2019 в 11:48
поделиться

1 ответ

Если вам нужно выбрать всех сотрудников со вторым окладом, используйте фильтр

dense_rank() over(partition by department order by salary desc) = 2. Он вернет всем сотрудникам вторую зарплату.

Если в отделе есть только 1 запись (второй зарплаты нет, один сотрудник в отделе), она будет оценена как 1, и вы не получите никаких записей для этого отдела фильтрации с плотным_ранком = 2.

[115 ] Если вам нужно выбрать только одну запись (не всех сотрудников) со вторым окладом, тогда сработает row_number() over(partition by department order by salary desc) = 2, но он выберет одного случайного сотрудника со вторым окладом, если много сотрудников со вторым окладом. Только одна запись будет помечена row_number = 2.

0
ответ дан leftjoin 18 March 2019 в 11:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: