我正在寻找一种方法来获得与特定条件匹配的行的百分比而不使用子查询。目前,我有:
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
基本上,每月有N
个新行,我希望获得与isMember = TRUE
条件相匹配的新行的百分比。是否有更短或更清洁的方法来做到这一点?
答案 0 :(得分:1)
假设table1
和table
实际上是相同的......你可以试试
SELECT 100*SUM(CASE WHEN `isMember` THEN 1 ELSE 0 END)/COUNT(*) percent_new
FROM `table1`
WHERE `date` BETWEEN @monthbegin AND @monthend
绝对不知道这是否比你的查询更快,但确实删除了子查询。
您也可以尝试:
SELECT 100*COUNT(CASE WHEN `isMember` THEN 1 ELSE NULL END)/count(*) percent_new
FROM `table1`
WHERE `date` BETWEEN @monthbegin AND @monthend
实际上,使用MySQL
处理BOOLEAN
列的方式可以逃脱:
SELECT 100*SUM(`isMember`)/COUNT(*) percent_new
FROM `table1`
WHERE `date` BETWEEN @monthbegin AND @monthend