计算百分比的高效MySQL查询
我是MySQL的新手,来自Oracle。我有一个SQL查询,用于计算表中类型的总计数和百分比 例如:计算百分比的高效MySQL查询,mysql,Mysql,我是MySQL的新手,来自Oracle。我有一个SQL查询,用于计算表中类型的总计数和百分比 例如: SELECT type,count(*) count_by_type ,a.tot total, (COUNT(*)*100/a.total) percent FROM xyz JOIN (select count(*) tot from xyz)a GROUP by type HAVING type = 'abc'; 此查询正在进行自联接。有没有更简单的方法来实现相同的功能?无需在此处使用
SELECT type,count(*) count_by_type ,a.tot total, (COUNT(*)*100/a.total) percent
FROM xyz
JOIN (select count(*) tot from xyz)a
GROUP by type
HAVING type = 'abc';
此查询正在进行自联接。有没有更简单的方法来实现相同的功能?无需在此处使用
自连接
和HAVING
子句。尝试一下:
SELECT COUNT(1) INTO @var_total FROM xyz;
SELECT type, count(1) AS count_by_type,
@var_total total,
(COUNT(1)*100/@var_total) AS percent
FROM xyz a
WHERE type = 'abc';
GROUP by type;
请定义“更简单”。这个查询一点也不复杂。PS:为什么您使用
HAVING
而不是WHERE
?您的查询非常简单。不是每个查询都可以用一行或两行代码编写…使用WHERE会更快吗?因为type
是表中的一个字段,您可以使用WHERE
而不是have
。它会更快。不。此查询将生成另一个结果集。非应答您的查询将产生MySQL错误,因为total
不是表xyz
中的字段SELECT
中的嵌套查询不太可能比JOIN
中的好,因为它将执行N次count(1)
并不比coun(*)好,但仍然-为什么count(1)
?!?!?我确信这个查询效率会降低,SELECT
子句中的子查询将被执行N次,如果不是缓存的话,但我不确定。mysql无法缓存嵌套查询您的查询可能会计算每条记录的total
。
SELECT type,count(1) count_by_type ,(select count(1) from xyz) total,
(count_by_type*100/total) percent FROM xyz WHERE type = 'abc';