符合条件的行的百分比

yiw*_*wei 4 mysql database

我正在寻找一种方法来获取与特定条件匹配的行的百分比,而不使用子查询。目前,我有:

SELECT 
((SELECT COUNT(*)
FROM `table1`
WHERE `date` >= @monthbegin AND `date` <= @monthend AND `isMember` = TRUE) / 
(SELECT COUNT(*) 
FROM `table`
WHERE `date` >= @monthbegin AND `date` <= @monthend) * 100) AS percent_new
Run Code Online (Sandbox Code Playgroud)

基本上,每个月都有N新行,我想获取这些新行与条件 where 匹配的百分比isMember = TRUE。有没有更短或更干净的方法来做到这一点?

Art*_*rth 8

假设table1table实际上是相同的..你可以尝试

SELECT 100*SUM(CASE WHEN `isMember` THEN 1 ELSE 0 END)/COUNT(*) percent_new
FROM `table1`
WHERE `date` BETWEEN @monthbegin AND @monthend
Run Code Online (Sandbox Code Playgroud)

绝对不知道这是否比您的查询更快,但它确实删除了子查询。

您还可以尝试:

SELECT 100*COUNT(CASE WHEN `isMember` THEN 1 ELSE NULL END)/count(*) percent_new
FROM `table1`
WHERE `date` BETWEEN @monthbegin AND @monthend
Run Code Online (Sandbox Code Playgroud)

MySQL实际上,使用处理列的方式BOOLEAN你可以逃脱:

SELECT 100*SUM(`isMember`)/COUNT(*) percent_new
FROM `table1`
WHERE `date` BETWEEN @monthbegin AND @monthend
Run Code Online (Sandbox Code Playgroud)