如何计算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;