[英]How to create new columns with count values based on the values from another column SQL
我正在使用Big Query,我的表格如下所示:
ID月值
1234年8月
1234年9月
3456年8月4日
D 3456年9月
4567年8月
D 4956年9月
我想為每個月和包含P,D的ID生成一個新列,列名稱和值是每個ID和Month的計數。 如下所示:
ID月PD
1234八月1 0
1234年9月1日0
3456八月0 1
3456 9月0 1
4567八月1 0
4567 9月1日1
以下是BigQuery標准SQL
#standardSQL
SELECT id, month, IF(value='P', 1, 0) AS p, IF(value='D', 1, 0) AS d
FROM `project.dataset.table`
您可以使用問題中的虛擬數據進行上述操作
#standardSQL
WITH `project.dataset.table` AS (
SELECT 1234 id, 'Aug' month, 'P' value UNION ALL
SELECT 1234, 'Sept', 'P' UNION ALL
SELECT 3456, 'Aug', 'D' UNION ALL
SELECT 3456, 'Sept', 'D' UNION ALL
SELECT 4567, 'Aug', 'P' UNION ALL
SELECT 4567, 'Sept', 'D'
)
SELECT id, month, IF(value='P', 1, 0) AS p, IF(value='D', 1, 0) AS d
FROM `project.dataset.table`
-- ORDER BY id
結果
Row id month p d
1 1234 Aug 1 0
2 1234 Sept 1 0
3 3456 Aug 0 1
4 3456 Sept 0 1
5 4567 Aug 1 0
6 4567 Sept 0 1
如果您的表中有重復的行並且需要計算值而不是僅僅顯示它們(如上面的查詢中所示),則可以使用以下示例
#standardSQL
WITH `project.dataset.table` AS (
SELECT 1234 id, 'Aug' month, 'P' value UNION ALL
SELECT 1234, 'Sept', 'P' UNION ALL
SELECT 1234, 'Sept', 'P' UNION ALL
SELECT 3456, 'Aug', 'D' UNION ALL
SELECT 3456, 'Sept', 'D' UNION ALL
SELECT 4567, 'Aug', 'P' UNION ALL
SELECT 4567, 'Sept', 'D'
)
SELECT id, month, COUNTIF(value='P') AS p, COUNTIF(value='D') AS d
FROM `project.dataset.table`
GROUP BY id, month
-- ORDER BY id, month
結果
Row id month p d
1 1234 Aug 1 0
2 1234 Sept 2 0
3 3456 Aug 0 1
4 3456 Sept 0 1
5 4567 Aug 1 0
6 4567 Sept 0 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.