首页 > 解决方案 > Oracle SQL:选择多个不同字段的计数

问题描述

我需要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

有什么建议么?

标签: sqloraclegroup-bydistinct

解决方案


您可以使用子查询:

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;

推荐阅读