Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算百分比的高效MySQL查询_Mysql - Fatal编程技术网

计算百分比的高效MySQL查询

计算百分比的高效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'; 此查询正在进行自联接。有没有更简单的方法来实现相同的功能?无需在此处使用

我是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';

此查询正在进行自联接。有没有更简单的方法来实现相同的功能?

无需在此处使用
自连接
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';