我有一个如下所示的表格
我想创建两个新的二进制列
,指示受试者是否服用了类固醇
和阿司匹林
。我希望在 Postgresql 和 google bigquery
下面的方法我都试过了,还是不行
select subject_id
case when lower(drug) like ('%cortisol%','%cortisone%','%dexamethasone%')
then 1 else 0 end as steroids,
case when lower(drug) like ('%peptide%','%paracetamol%')
then 1 else 0 end as aspirin,
from db.Team01.Table_1
SELECT
db.Team01.Table_1.drug
FROM `table_1`,
UNNEST(table_1.drug) drug
WHERE REGEXP_CONTAINS( db.Team01.Table_1.drug,r'%cortisol%','%cortisone%','%dexamethasone%')
我希望我的输出如下所示
最佳答案
以下是 BigQuery 标准 SQL
#standardSQL
SELECT
subject_id,
SUM(CASE WHEN REGEXP_CONTAINS(LOWER(drug), r'cortisol|cortisone|dexamethasone') THEN 1 ELSE 0 END) AS steroids,
SUM(CASE WHEN REGEXP_CONTAINS(LOWER(drug), r'peptide|paracetamol') THEN 1 ELSE 0 END) AS aspirin
FROM `db.Team01.Table_1`
GROUP BY subject_id
如果应用于您问题中的样本数据 - 结果是
Row subject_id steroids aspirin
1 1 3 1
2 2 1 1
注意:不是简单的 LIKE 以冗长和冗余的文本结尾 - 我正在使用 LIKE on steroids
- 这是 REGEXP_CONTAINS
关于sql - 谷歌bigquery中包含的字符串的等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58197814/