Как посчитать каждое значение столбца в таблице? - PullRequest
1 голос
/ 21 сентября 2010

У меня есть такая таблица:

UserID     Customer ID status        
1               1          1
1               2          1 
1               3          1
1               4          2
1               5          1
1               6          3
1               7          2
2               8          1
2               9          2 
 ........

Я хочу суммировать эту таблицу к следующему:

 UserID           count(status 1)    count(status 2)   count(status 3)
    1                4                2                     1 
    2                1                2                     3
   .........

Как я могу сделать это в PL / SQL?

Заранее благодарен

Ответы [ 4 ]

10 голосов
/ 21 сентября 2010

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

Что-то вроде:

select
  UserId,
  sum(case status when 1 then 1 else 0 end) as Status1,
  sum(case status when 2 then 1 else 0 end) as Status2,
  sum(case status when 3 then 1 else 0 end) as Status3
from SomeTable
group by UserId
order by UserId

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

select UserId, status, count(*)
from SomeTable
group by UserId, status
order by UserId, status
1 голос
/ 21 сентября 2010
SELECT *
  FROM ( SELECT UserID,
                status,
                COUNT(status)
           FROM <table>
          GROUP BY UserID,
                   status
       )
 PIVOT(COUNT(status) FOR status IN (1,2,3))
1 голос
/ 21 сентября 2010
select userid, 
       count(decode(status, 1, 1, null)),
       count(decode(status, 2, 1, null)),
       count(decode(status, 3, 1, null)),
  from table
 group by userid
0 голосов
/ 22 сентября 2010

Просто чтобы следить за комментариями @ Vimvq1987 и @Guffa: правильный синтаксис для SQL равен case ... end, но для PL / SQL это может быть case ... end case, поэтому информация по указанной вами ссылке верна.

Следовательно, в ваших SQL-запросах (вы выполняете их в SQL-Plus или в DML в PL / SQL) вы должны использовать case ... end, но в процедурах PL / SQL case ... end case требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...