首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在from子句中可以有两个子查询吗?

在from子句中可以有两个子查询吗?
EN

Stack Overflow用户
提问于 2019-11-11 17:56:09
回答 2查看 199关注 0票数 0

我正在编写这个查询,它必须从同一个表中计数两种类型的数据,但属性不同。

我已经尝试在子查询之间添加" and“和”and ",但它并不以这些方式工作。

代码语言:javascript
运行
复制
SELECT COUNT(sb1.prop) AS PROP1, COUNT(sb2.prop) AS PROP2
FROM (SELECT * FROM TABLE t WHERE t.prop LIKE '%SOMETHING%') AS sb1
      AND/,/WHATEVER WORKS
     (SELECT * FROM TABLE t WHERE t.prop LIKE '%SOMETHING ELSE%') AS sb2

我需要计算有多少记录有像 the the这样的道具,如何在一个子句的一个查询中使用两个子查询来做到这一点?我有诸如“算术溢出错误将表达式转换为数据类型数值”之类的错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-11 18:02:37

你所描述的是:

代码语言:javascript
运行
复制
SELECT COUNT(sb1.prop) AS PROP1,
       COUNT(sb2.prop) AS PROP2
FROM (SELECT * FROM TABLE t WHERE t.prop LIKE '%SOMETHING%') AS sb1
     CROSS APPLY (SELECT * FROM TABLE t WHERE t.prop LIKE '%SOMETHING ELSE%') AS sb2;

然而,这不会返回您所追求的结果( PROP1PROP2都具有相同的值)。上述内容实际上与以下内容相同:

代码语言:javascript
运行
复制
SELECT COUNT(*) AS PROP1,
       COUNT(*) AS PROP2
FROM TABLE t1
     CROSS JOIN TABLE t2
WHERE t1.prop LIKE '%SOMETHING%'
  AND t2.prop LIKE '%SOMETHING ELSE%';

您可以通过在子查询中执行聚合来解决这个问题:

代码语言:javascript
运行
复制
SELECT (SELECT COUNT(*) FROM TABLE t WHERE t.prop LIKE '%SOMETHING%') AS PROP1,
       (SELECT COUNT(*) FROM TABLE t WHERE t.prop LIKE '%SOMETHING ELSE%') AS PROP2;

但是,考虑到这些表是相同的,最好使用条件聚合:

代码语言:javascript
运行
复制
SELECT COUNT(CASE WHEN t.prop LIKE '%SOMETHING%' THEN 1 END) AS PROP1,
       COUNT(CASE WHEN t.prop LIKE '%SOMETHING ELSE%' THEN 1 END) AS PROP2
FROM TABLE t;
票数 1
EN

Stack Overflow用户

发布于 2019-11-11 18:02:40

我认为您可以在这里使用条件聚合:

代码语言:javascript
运行
复制
select
    sum(case when prop like '%SOMETHING%' then 1 end) sb1,
    sum(case when prop like '%SOMETHING ELSE%' then 1 end) sb2
from mytable

注意:使用当前的设置,匹配'%SOMETHING%'的内容将在每个sum()中计算一次(但我只能想象这是假设性数据和过滤器)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58806376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档