Fachry DzakyアルQadri Sabil:
私は、このようなテーブル構造を有しています
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_orderの販売、カウント量の割合を作りたいです
私の場合に基づき、これは期待される結果です。
+----------+-----------+-----------+--------------------+----------------------+
| 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句ではなく、GROUP BY句の列に機能的に依存しない非集約列「fiddle_WKQHEMOVYSDKFWLXWXHB.sales.sale」が含ま言われています。これはsql_modeの= ONLY_FULL_GROUP_BYと互換性がありません。
セバスチャンブローチ:
あなたは使用して、以下のソリューションを使用することができますSUM .. OVER
:
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
...またはあなたが使用して、以下のソリューションを使用することができますGROUP BY
とWITH ROLLUP
:
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;