Если вы хотите ранжировать только одного человека, вы можете сделать следующее:
SELECT COUNT(Age) + 1
FROM PERSON
WHERE(Age < age_to_rank)
Это ранжирование соответствует функции ORACLE RANK (Если у вас есть люди с одинаковым возрастом, они получают одинаковый ранг , и ранжирование после этого не является последовательным).
Это немного быстрее, чем использование одного из вышеперечисленных решений в подзапросе и выбор из этого для получения рейтинга одного человека.
Это можно использовать для ранжирования всех, но это медленнее, чем вышеупомянутые решения.
SELECT
Age AS age_var,
(
SELECT COUNT(Age) + 1
FROM Person
WHERE (Age < age_var)
) AS rank
FROM Person
Похоже, вам нужен ответ от обеих служб одновременно; если это так, то RxJS ForkJoin - ваш друг! Вы можете использовать
blockquote>forkJoin
следующим образом -import { forkJoin } from 'rxjs'; submit() { const combined = forkJoin([ this.data.getUsers(), this.otherData.getUnitAssignments() ]); combined.subscribe((response) => { // you will get 2 arrays in response this.dataSource.push(response[0].rows); this.dataSource.push(response[1].rows); }); }
- FYI ,
forkJoin
ожидает завершения каждого http-запроса и группирует все observables, возвращаемые каждым вызовом http в один наблюдаемый массив, и, наконец, возвращают этот наблюдаемый массив.
Одним из решений является использование оператора RxJs combLatest для объединения ответов от всех служб:
submit() {
combineLatest(
this.service1.getData(),
this.service2.getData(),
this.service3.getData()
).subscribe(allData => ...)
}
strike> [116 ]
Редактировать: После дальнейших размышлений я предлагаю, чтобы в этом случае использования, когда должен завершаться каждый HTTP-запрос, вы использовали forkJoin
в ответ Тушара Уолзаде. Этот ответ SO дает краткое объяснение различия между forkJoin
и combineLatest
.