Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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_Mysql Workbench - Fatal编程技术网

如何计算mysql窗口函数的百分比

如何计算mysql窗口函数的百分比,mysql,mysql-workbench,Mysql,Mysql Workbench,我有这样的桌子结构 CREATE TABLE sales( id_order VARCHAR(50) NOT NULL, fiscal_year INT NOT NULL, sale DECIMAL(14,2) NOT NULL, location varchar(50) NOT NULL, PRIMARY KEY(id_order,fiscal_year) ); INSERT INTO sales(id_order,fiscal_year,sale,

我有这样的桌子结构

CREATE TABLE sales(
    id_order VARCHAR(50) NOT NULL,
    fiscal_year INT NOT NULL,
    sale DECIMAL(14,2) NOT NULL,
    location varchar(50) NOT NULL,
    PRIMARY KEY(id_order,fiscal_year)
);

INSERT INTO sales(id_order,fiscal_year,sale, location)
VALUES(1,2016,100, 'Jakarta'),
      (2,2017,150, 'Bekasi'),
      (3,2018,200, 'Depok'),
      (4,2016,150, 'Jakarta'),
      (5,2017,100, 'Bekasi'),
      (6,2018,200, 'Depok'),
       (7,2016,200, 'Jakarta'),
      (8,2017,150, 'Bekasi'),
      (9,2018,250, 'Depok');

SELECT * FROM sales;
在这种情况下,我想对销售金额和id_订单数量与地点进行百分比计算

根据我的案例,这是预期结果:

+----------+-----------+-----------+--------------------+----------------------+
| Location |  sale(kg) |  sale (%) |   count(id_order)  |  count(id_order) (%) |
+----------+-----------+-----------+--------------------+----------------------+
| Jakarta  |       450 | 30 %      |                  3 | 33,33%               |
| Bekasi   |       400 | 26,67 %   |                  3 | 33,33%               |
| Depok    |       650 | 43,33 %   |                  3 | 33,33%               |
| Total    |      1500 | 100 %     |                  9 | 100%                 |
+----------+-----------+-----------+--------------------+----------------------+
我尝试过这种语法

SELECT 
    location,
    sum(sale)/ sum(sale) over()
    sum(count(id_order)) / sum(count(id_order)) over()
FROM
    sales
    group by location; 
但据说 SELECT列表的表达式2不在GROUP BY子句中,它包含未聚合的列“FIDLE_WKQHEMOVYSDKFWLXWXHB.sales.sales”,该列在功能上不依赖于GROUP BY子句中的列;这与sql\u mode=only\u full\u group\u by不兼容


您可以使用以下解决方案:

。。。或者,您可以使用以下解决方案:


您可以使用以下解决方案:

。。。或者,您可以使用以下解决方案:

以cte作为选择位置, 大甩卖, countid_顺序cnt 来自销售 使用汇总按位置分组 选择COALESCEt1.location,“TOTAL”位置, t1.销售`销售公斤', t1.sale/t2.sale*100`sale%`, t1.cnt`countid\u order`, t1.cnt/t2.cnt*100`countid\u订单%` 从cte t1到cte t2 其中t2.location为空 以cte作为选择位置, 大甩卖, countid_顺序cnt 来自销售 使用汇总按位置分组 选择COALESCEt1.location,“TOTAL”位置, t1.销售`销售公斤', t1.sale/t2.sale*100`sale%`, t1.cnt`countid\u order`, t1.cnt/t2.cnt*100`countid\u订单%` 从cte t1到cte t2 其中t2.location为空
非常感谢先生的帮助,祝您愉快非常感谢先生的帮助,祝您愉快抱歉打字,我想打一个百分比抱歉打字,我想打一个百分比哦,我忘了先生,您能给我一个建议吗,所以在我的真实情况下,位置在不同的表中,以相同的代码顺序作为主键,你能帮我一点忙吗case@FachryDzakyAl-QadriSabil-你能更新演示以查看结构吗?看起来你需要一个不同的表和销售表的内部联接。哦,我忘了,先生,你能给我一个建议吗,所以在我的实际情况中,位置在不同的表中,与主键的代码顺序相同,你能给我一点帮助吗case@FachryDzakyAl-QadriSabil-你能更新演示以查看结构吗?看起来您需要一个与不同表和sale表的内部联接。
SELECT DISTINCT 
  location AS `Location`, 
  SUM(sale) OVER (PARTITION BY location) AS `sale(kg)`,
  SUM(sale) OVER (PARTITION BY location) / SUM(sale) OVER () * 100 AS `sale (%)`,
  COUNT(id_order) OVER (PARTITION BY location) AS `count(id_order)`,
  COUNT(id_order) OVER (PARTITION BY location) / COUNT(id_order) OVER () * 100 AS `count(id_order) (%)`
FROM sales
UNION ALL
SELECT 'Total', SUM(sale), 100, COUNT(id_order), 100
FROM sales
SELECT 
  IFNULL(location, 'Total') AS `Location`, 
  SUM(sale) AS `sale(kg)`,
  SUM(sale) / (SELECT SUM(sale) FROM sales) * 100 AS `sale (%)`, 
  COUNT(id_order) AS `count(id_order)`,
  COUNT(id_order) / (SELECT COUNT(id_order) FROM sales) * 100 AS `count(id_order) (%)`
FROM sales 
GROUP BY location WITH ROLLUP;