sql - 谷歌bigquery中包含的字符串的等价物

标签 sql postgresql google-bigquery

我有一个如下所示的表格

enter image description here

我想创建两个新的二进制列,指示受试者是否服用了类固醇阿司匹林。我希望在 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%')

我希望我的输出如下所示

enter image description here

最佳答案

以下是 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/

相关文章:

node.js - BigQuery : Questions on Delete and Update rows using nodejs

SQL Server 2008 - 计算平均值定时

php - 通过 mysql_query(...) 执行时有效的 mysql 查询返回错误

mysql - SQL - where子句只匹配一个条件

SQL 按连续行的 session 对行进行排名

java - OneToMany 将 POJO 映射到 JSON Spring

google-bigquery - 使用 require_partition_filter 列出 BigQuery 分区表中的所有分区

php - 用php插入mysql数据库

sql - 如何重写长查询?

sql - 在 Google BigQuery 中的最近日期左加入