我正在编写这个查询,它必须从同一个表中计数两种类型的数据,但属性不同。
我已经尝试在子查询之间添加" and“和”and ",但它并不以这些方式工作。
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这样的道具,如何在一个子句的一个查询中使用两个子查询来做到这一点?我有诸如“算术溢出错误将表达式转换为数据类型数值”之类的错误。
发布于 2019-11-11 10:02:37
你所描述的是:
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;
然而,这不会返回您所追求的结果( PROP1
和PROP2
都具有相同的值)。上述内容实际上与以下内容相同:
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%';
您可以通过在子查询中执行聚合来解决这个问题:
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;
但是,考虑到这些表是相同的,最好使用条件聚合:
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;
发布于 2019-11-11 10:02:40
我认为您可以在这里使用条件聚合:
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()
中计算一次(但我只能想象这是假设性数据和过滤器)。
https://stackoverflow.com/questions/58806376
复制