我能够计算同一记录中每个ID的唯一值的出现次数,但是似乎必须有一种更有效的方法?像COUNT([Value],'2')
一样?
这是一个简单的例子
ID | Value
1 2
1 3
1 3
1 2
2 2
2 3
2 3
3 3
这是我当前的代码:
SELECT ID, SUM(CASE WHEN Value = '2' THEN 1 ELSE 0 END) AS "COUNT2",
SUM(CASE WHEN Value = '2' THEN 1 ELSE 0 END) AS "COUNT3"
FROM TABLE
GROUP BY ID
结果是:
ID | Count2 | Count3
1 2 3
2 1 2
3 0 1
是否有更好的方法来获取唯一值的计数?
答案 0 :(得分:1)
尝试:
ID | Value
-------------------------- | -------------------------------
AAA1|404744 | 1.7554
ANKHD1-EIF4EBP3|404734 | 0.5174
HLA-B|3106 | 11.7659
HLA-A|3105 | 18.0851
从我的手机中键入内容,可能需要稍作调整,但类似的操作应该可以
答案 1 :(得分:0)
如果“更好”表示您更简洁,则可以使用DECODE
WITH I (ID, V) AS (VALUES
(1,2)
, (1,3)
, (1,3)
, (1,2)
, (2,2)
, (2,3)
, (2,3)
, (3,3)
)
SELECT
ID
, COUNT(DECODE(V,2,1)) AS "Count2"
, COUNT(DECODE(V,3,1)) AS "Count3"
FROM I
GROUP BY
ID
返回
ID Count2 Count3
-- ------ ------
1 2 2
2 1 2
3 0 1
答案 2 :(得分:0)
如果您以后使用的是Db2 LUW 11.1.1.1,则可以利用以下事实:可以SUM
BOOLEAN
个值。
WITH I (ID, V) AS (VALUES
(1,2)
, (1,3)
, (1,3)
, (1,2)
, (2,2)
, (2,3)
, (2,3)
, (3,3)
)
SELECT
ID
, SUM(V=2) AS "Count2"
, SUM(V=3) AS "Count3"
FROM I
GROUP BY
ID