首页 > 解决方案 > sql select count(* like '%%')/select count(*)

问题描述

我想计算具有blah某处的段落相对于总段落数的数量比例。

我试过了:

select 
  (select count(*) from raw_data where lower(Paragraph) like '%blah%') a,
  (select count(*) from raw_data) b, 
  a/b

但最终出现以下错误:

SQL 语句中的错误:AnalysisException:无法解析“ a”给定的输入列:[];第 1 行,第 164 行;

但是,如果我跑

select 
  (select count(*) from raw_data where lower(Paragraph) like '%blah%') a,
  (select count(*) from raw_data) b

返回具有正确计数的 2 列:

a   b
9   100

我想:

a    b    a/b
9    100  0.09

有什么建议么

标签: sql

解决方案


使用条件聚合:

select sum(case when lower(Paragraph) like '%blah%' then 1 else 0 end) as a,
       count(*) as b,
       avg(case when lower(Paragraph) like '%blah%' then 1.0 else 0 end) as a_b      
from raw_data;

推荐阅读