2015-05-15 1 views
1

Как я могу подсчитать количество вхождений в данном столбце?ROW_NUMBER за результатом столбца

Следуйте этому примеру. С таблицей такой:

+----------+---------+------+ 
| PersonID | Name | City | 
+----------+---------+------+ 
|  1 | John | NY | 
|  2 | Mohit | CA | 
|  3 | Jay  | AZ | 
|  4 | Roger | NY | 
|  5 | David | NY | 
|  6 | Peter | AZ | 
|  7 | Ana  | NY | 
|  8 | Irina | NY | 
|  9 | Michael | NY | 
|  10 | Ken  | AZ | 
+----------+---------+------+ 

Как я могу это достичь?

+----------+---------+------+-------------+ 
| PersonID | Name | City | CityCounter | 
+----------+---------+------+-------------+ 
|  1 | John | NY |   1 | 
|  2 | Mohit | CA |   1 | 
|  3 | Jay  | AZ |   1 | 
|  4 | Roger | NY |   2 | 
|  5 | David | NY |   3 | 
|  6 | Peter | AZ |   2 | 
|  7 | Ana  | NY |   4 | 
|  8 | Irina | NY |   5 | 
|  9 | Michael | NY |   6 | 
|  10 | Ken  | AZ |   3 | 
+----------+---------+------+-------------+ 

Должен ли я использовать функцию ROW_NUMBER над SUM?

ответ

3

Это так просто, как это.

SELECT *, 
     cityCounter = ROW_NUMBER() OVER (PARTITION BY city ORDER BY personID) 
FROM yourTable 
ORDER BY personID 
+1

Это делает трюк, спасибо. –

1

Если я правильно понимаю, вы просто хотите, чтобы перечислить значения для каждого города, а затем сортировать по id:

select t.* 
from (select t.*, 
      row_number() over (partition by city 
           order by personid) as CityCounter 
     from table t 
    ) t 
order by personid; 
1

Вы можете достичь результата с помощью row_number() аналитическую функцию, но не более чем SUM ? Вы можете прочитать online документацию об использовании row_number() и его правильном синтаксисе.

В вашем случае вы хотите указать количество мест в каждом городе, что означает, что вам нужно группировать по городу (перегородка по городу), тогда вам нужно указать логику вашего заказа, в которой должна быть первая строка города, является это когда firstID приходит первым?

Ваш row_number бы тогда выглядит следующим образом:

row_number() over(partition by city order by personID)