Подсчет появления значений во втором столбце на основе уникального значения в первом столбце - PullRequest
0 голосов
/ 09 октября 2019

Простейший способ объяснить это дано в этой таблице в Oracle SQL ...

+-----------------+------------+
| COUNTRY         | VALUE      |  
+-----------------+------------+
| England         | A          |
| England         | A          |
| England         | A          |
| England         | B          |
| England         | B          |
| France          | A          |
| France          | A          |
| France          | B          |
+-----------------+------------+

как мне получить этот результат, который представляет собой число A и B для уникальных значений в столбце COUNTRY

+-----------+------------+------------+
| COUNTRY   | COUNT(A)   | COUNT(B)   |   
+-----------+------------+------------+
| England   | 3          | 2          |
| France    | 2          | 1          |
+-----------+------------+------------+

Я уверен, что на этот вопрос уже дан ответ, я просто не знаю, как задать вопрос. Спасибо

Ответы [ 2 ]

1 голос
/ 09 октября 2019
select country,
       sum( case when value = 'A' then 1 else 0 end ) numA,
       sum( case when value = 'B' then 1 else 0 end ) numB
  from table
 group by country

является одним примером условного агрегирования

0 голосов
/ 09 октября 2019

Использование PIVOT:

Установка Oracle :

CREATE TABLE table_name ( COUNTRY, VALUE ) AS
SELECT 'England', 'A' FROM DUAL UNION ALL
SELECT 'England', 'A' FROM DUAL UNION ALL
SELECT 'England', 'A' FROM DUAL UNION ALL
SELECT 'England', 'B' FROM DUAL UNION ALL
SELECT 'England', 'B' FROM DUAL UNION ALL
SELECT 'France',  'A' FROM DUAL UNION ALL
SELECT 'France',  'A' FROM DUAL UNION ALL
SELECT 'France',  'B' FROM DUAL;

Запрос :

SELECT *
FROM   table_name
PIVOT ( COUNT(*) FOR value IN ( 'A' AS "COUNT(A)", 'B' AS "COUNT(B)" ) )

Выход :

COUNTRY | COUNT(A) | COUNT(B)
:------ | -------: | -------:
England |        3 |        2
France  |        2 |        1

дБ <> скрипка здесь

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