MySQL两个COUNT语句之和
我知道这是一个愚蠢的解决方案,但是,对不起,我有点困惑 我有两个SELECT COUNT语句。例如: 报表1 总数=3 _ 报表2 totalcout=1 我想将两个总数相加,得到totalcount=4。有办法吗 注:“软件一号”和“软件二号”列中的软件类型相同(值相同) 感谢大家。一种方法是写:MySQL两个COUNT语句之和,mysql,count,sum,Mysql,Count,Sum,我知道这是一个愚蠢的解决方案,但是,对不起,我有点困惑 我有两个SELECT COUNT语句。例如: 报表1 总数=3 _ 报表2 totalcout=1 我想将两个总数相加,得到totalcount=4。有办法吗 注:“软件一号”和“软件二号”列中的软件类型相同(值相同) 感谢大家。一种方法是写: SELECT SUM(CASE WHEN softwareone LIKE '%typeone%' AND softwaretwo LIKE '%typeone%'
SELECT SUM(CASE WHEN softwareone LIKE '%typeone%'
AND softwaretwo LIKE '%typeone%'
THEN 2
ELSE 1
END
) AS "totalcount"
FROM my_table
WHERE softwareone LIKE '%typeone%'
OR softwaretwo LIKE '%typeone%'
;
案例。。。END
表达式在两个条件都满足时将计算为2
(因此,如果softwareone
和softwaretwo
都是类似“%typeone%”
,则行计数两次),并且在只有一个条件满足时计算为1
。因此,SUM(CASE…END)
给出满足一个条件的总行数,加上满足另一个条件的总行数。您可以使用
Select l1.totalcount + l2.totalcount FROM
(SELECT COUNT(softwareone) AS totalcount
FROM my_table WHERE softwareone LIKE '%typeone%') as l1,
(SELECT COUNT(softwaretwo) AS totalcount
FROM my_table WHERE softwaretwo LIKE '%typeone%') as l2
这两个选项都是故意在
%typeone%
上选择filter的吗?+1子查询解决方案会导致MySQL多次扫描记录。此查询只会导致MySQL扫描一次。
SELECT SUM(CASE WHEN softwareone LIKE '%typeone%'
AND softwaretwo LIKE '%typeone%'
THEN 2
ELSE 1
END
) AS "totalcount"
FROM my_table
WHERE softwareone LIKE '%typeone%'
OR softwaretwo LIKE '%typeone%'
;
Select l1.totalcount + l2.totalcount FROM
(SELECT COUNT(softwareone) AS totalcount
FROM my_table WHERE softwareone LIKE '%typeone%') as l1,
(SELECT COUNT(softwaretwo) AS totalcount
FROM my_table WHERE softwaretwo LIKE '%typeone%') as l2