我可以知道是否有像Excel
countif
中那样的sql语句来根据条件计算高、中、低。
例如,下表显示了在 high 中使用 countif,我们可以看到每行 High 多少、low 多少、medium 多少
ID Name Value1 Value2 Value3 ValueN High Medium Low
--- ------- --------- --------- -------- ------- ----- ------ ------
1 A High High Low Medium 2 1 1
2 AB Low Medium Low High 1 1 2
3 ABC High Low Low High 2 0 2
最佳答案
您可以先使用UNPIVOT
数据,然后进行条件聚合:
SELECT ID, Name,
COUNT(CASE WHEN val = 'High' THEN 1 END) AS High,
COUNT(CASE WHEN val = 'Medium' THEN 1 END) AS Medium,
COUNT(CASE WHEN val = 'Low' THEN 1 END) AS Low
FROM tab
UNPIVOT( val FOR col_name IN (Value1, Value2, Value3, ValueN)) unpvt
GROUP BY ID, Name
要处理更多列,只需将它们添加到:
val FOR col_name IN (Value1, Value2, Value3, ValueN)
最终查询包含原始选项卡中的所有列:
SELECT t.*, sub.High, sub.Medium, sub.Low
FROM tab t
JOIN (SELECT ID, Name,
COUNT(CASE WHEN val = 'High' THEN 1 END) AS High,
COUNT(CASE WHEN val = 'Medium' THEN 1 END) AS Medium,
COUNT(CASE WHEN val = 'Low' THEN 1 END) AS Low
FROM tab
UNPIVOT( val FOR col_name IN (Value1, Value2, Value3, ValueN)) unpvt
GROUP BY ID, Name) sub
ON t.ID = sub.ID
输出:
╔════╦══════╦════════╦════════╦════════╦════════╦══════╦════════╦═════╗
║ ID ║ Name ║ Value1 ║ Value2 ║ Value3 ║ ValueN ║ High ║ Medium ║ Low ║
╠════╬══════╬════════╬════════╬════════╬════════╬══════╬════════╬═════╣
║ 1 ║ A ║ High ║ High ║ Low ║ Medium ║ 2 ║ 1 ║ 1 ║
║ 2 ║ AB ║ Low ║ Medium ║ Low ║ High ║ 1 ║ 1 ║ 2 ║
║ 3 ║ ABC ║ High ║ Low ║ Low ║ High ║ 2 ║ 0 ║ 2 ║
╚════╩══════╩════════╩════════╩════════╩════════╩══════╩════════╩═════╝
关于sql - Oracle sql中使用countif计算每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35753972/