我正在寻找一种方法来获取与特定条件匹配的行的百分比,而不使用子查询。目前,我有:
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。有没有更短或更干净的方法来做到这一点?
假设table1和table实际上是相同的..你可以尝试
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)
| 归档时间: |
|
| 查看次数: |
4993 次 |
| 最近记录: |