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;