Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.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
Php 计算别名列上的百分比_Php_Mysql_Sql - Fatal编程技术网

Php 计算别名列上的百分比

Php 计算别名列上的百分比,php,mysql,sql,Php,Mysql,Sql,服务器类型:MariaDB服务器版本:10.4.16-MariaDB-MariaDB.org二进制分发协议版本:10 如何基于和别名列的值计算百分比 SELECT REGION, PARTY, SUM(RESULT) AS 'TOTALVOTES', (TOTALVOTES/SUM(TOTALVOTES)) * 100 AS 'SHARE' FROM e_presidential WHERE REGION = "ASHANTI" GROUP BY PARTY ORDER BY

服务器类型:MariaDB服务器版本:10.4.16-MariaDB-MariaDB.org二进制分发协议版本:10

如何基于和别名列的值计算百分比

SELECT REGION, PARTY, SUM(RESULT) AS 'TOTALVOTES',
(TOTALVOTES/SUM(TOTALVOTES)) * 100 AS 'SHARE'
FROM e_presidential
WHERE REGION = "ASHANTI"
GROUP BY PARTY
ORDER BY TOTALVOTES DESC;
--
我收集到的信息是,我不能对别名列执行此操作。

我们不能在计算中使用别名列,因为这是我们给出的,从逻辑上讲,它不是列。这可以通过

SELECT REGION, PARTY, SUM(RESULT) AS 'TOTALVOTES',
(TOTALVOTES/SUM(TOTALVOTES)) * 100 AS 'SHARE'
FROM e_presidential
WHERE REGION = "ASHANTI"
GROUP BY PARTY
ORDER BY TOTALVOTES DESC;
    SELECT REGION, PARTY, SUM(RESULT) AS 'TOTALVOTES',
(SUM(RESULT)/SUM(TOTALVOTES)) * 100 AS 'SHARE'
FROM e_presidential
WHERE REGION = "ASHANTI"
GROUP BY PARTY
ORDER BY TOTALVOTES DESC;
这将正常工作

使用窗口功能:

SELECT REGION, PARTY, SUM(RESULT) AS TOTALVOTES,
       SUM(RESULT) * 100 / SUM(SUM(RESULT)) OVER () AS SHARE
FROM e_presidential
WHERE REGION = 'ASHANTI'
GROUP BY REGION, PARTY
ORDER BY TOTALVOTES DESC;
请注意,我将
区域
包括在
分组中。我很惊讶您的查询没有生成错误,因为
groupby
列与未聚合的
SELECT
列不一致

如果要对所有区域进行此操作,但不包括区域内的总数,则需要按分区进行

SELECT REGION, PARTY, SUM(RESULT) AS TOTALVOTES,
       SUM(RESULT) * 100 / SUM(SUM(RESULT)) OVER (PARTITION BY REGION) AS SHARE
FROM e_presidential
GROUP BY REGION, PARTY
ORDER BY REGION, TOTALVOTES DESC;

是说明代码运行的数据小提琴。

您不能在同一
SELECT
语句中使用派生列的别名来执行任何计算。
如果您希望按地区列出各方的百分比,请使用CTE计算每个地区的总数并加入查询:

WITH cte AS (SELECT region, SUM(result) total_region FROM e_presidential GROUP BY region)
SELECT p.party, p.region,
       SUM(p.result) total_party,
       100 * SUM(p.result) / c.total_region share
FROM e_presidential p INNER JOIN cte c
ON c.region = p.region
GROUP BY party, region
WITH cte AS (SELECT SUM(result) total FROM e_presidential)
SELECT party, 
       SUM(result) total_party,
       100 * SUM(result) / (SELECT total FROM cte) share
FROM e_presidential
GROUP BY party
如果要计算所有区域各方的百分比,请使用CTE,计算所有区域的总数,并在查询中使用:

WITH cte AS (SELECT region, SUM(result) total_region FROM e_presidential GROUP BY region)
SELECT p.party, p.region,
       SUM(p.result) total_party,
       100 * SUM(p.result) / c.total_region share
FROM e_presidential p INNER JOIN cte c
ON c.region = p.region
GROUP BY party, region
WITH cte AS (SELECT SUM(result) total FROM e_presidential)
SELECT party, 
       SUM(result) total_party,
       100 * SUM(result) / (SELECT total FROM cte) share
FROM e_presidential
GROUP BY party

这产生了与我相同的错误。“字段列表”中的未知列“TOTALVOTES”您使用的是哪一版本的MySQL?服务器类型:MariaDB服务器版本:10.4.16-MariaDB-MariaDB.org二进制分发协议版本:10您希望按区域或仅针对每一方的百分比?您的代码甚至不运行。