Подсчитать количество записей в результатах SQL до достижения определенного значения - PullRequest
0 голосов
/ 11 апреля 2019

Предполагается подсчитать количество записей SQL, пока не будет достигнуто определенное значение в одном из столбцов таблицы. Использование Asp /VBscript.

Не уверен, как сформулировать запрос.

Что я пробовал, так это, конечно, не работает. Я хотел бы организовать результаты по столбцу «точки» в порядке убывания, сгруппированному по city_id «12500». Затем мне нужно подсчитать количество записей, пока не будет найден конкретный "member_id". Некоторые значения «точек» также могут быть одинаковыми, что может привести к неправильному счету. Аналогичные значения баллов следует игнорировать.

ДБ с именем "рейтинга" выглядит следующим образом:

id  |  member_id  |  city_id  |  points
1   |      1      |   12500   |    2
3   |      2      |   12500   |    5
4   |     34      |     800   |    1
5   |     14      |   12500   |    14
6   |      6      |     600   |    12
7   |     11      |   12500   |    11
8   |     12      |   12500   |    5

Например, если я хочу найти рейтинг для member_id "2", который принадлежит к city_id "12500", правильное конечное значение из функции Count должно быть 3. Это потому, что member_id "2" имеет третье по величине значение в city_id "12500", даже после учета привязки в пунктах с member_id "12".

Это все, что я могу себе представить, потому что я ни в коем случае не профессионал, и я знаю, что ему многое не хватает!

member_id = 2
city_id = 12500

SELECT Count() as city_ranking FROM (SELECT * from rankings WHERE city_id='"&city_id&"' AND member_id <> '"&member_id&"' ORDER BY points DESC)

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Вы можете получить звание для конкретного участника, выполнив:

select count(distinct points)
from ranking r cross join
     (select r.*
      from ranking r
      where member_id = 5
     ) rm
where r.points >= rm.points and
      r.city_id = rm.city_id;

Хотя вы можете выразить это с помощью оконных функций, это немного волнует, потому что вы должны быть осторожны с тем, где вы размещаете свои фильтры.

0 голосов
/ 11 апреля 2019

Функция DENSE_RANK должна помочь вам!

SELECT *, DENSE_RANK() OVER (PARTITION BY city_ID ORDER BY points DESC) AS columnAliasOfYourChoice FROM TABLE

...