Oracle SQL: выберите количество различных полей - PullRequest
0 голосов
/ 11 марта 2019

Мне нужно select id, type и количество строк с уникальными id-type комбинациями.

Итак, я попробовал что-то вроде этого:

SELECT ID,
       CASE
         WHEN /**/ THEN 'FIRST'
         WHEN /**/ THEN 'ANOTHER'
         ELSE 'ELSE'
         END AS TYPE,
       COUNT(DISTINCT ID, TYPE)

FROM   PRODUCTS

GROUP BY ID, TYPE;

Также проблема заключается в типе, вычисляемом при обработке запроса, поэтому, когда я пытался сделать что-то вроде:

SELECT ID,
       /*SOMETHING*/ END AS TYPE,
       COUNT(*)

FROM (SELECT DISTINCT ID,TYPE FROM PRODUCTS GROUP BY ID,TYPE);

Я получил это:

 ORA-00904: "TYPE": invalid identifier

Есть предложения?

Ответы [ 2 ]

1 голос
/ 11 марта 2019

Вы можете использовать подзапрос:

SELECT DISTINCT ID,
       (CASE WHEN /**/ THEN 'FIRST'
             WHEN /**/ THEN 'ANOTHER'
             ELSE 'ELSE'
        END) AS TYPE
FROM  PRODUCTS;

Затем вы можете преобразовать его как подзапрос ::

SELECT ID, TYPE, COUNT(*)
FROM ( <QUERY HERE> ) T
GROUP BY ID, TYPE;
0 голосов
/ 11 марта 2019

Вы ищете это:

SELECT ID,
       (CASE WHEN /**/ THEN 'FIRST'
             WHEN /**/ THEN 'ANOTHER'
             ELSE 'ELSE'
        END) AS TYPE,
       COUNT(*)
FROM PRODUCTS
GROUP BY ID, 
         (CASE WHEN /**/ THEN 'FIRST'
               WHEN /**/ THEN 'ANOTHER'
               ELSE 'ELSE'
        END);
...