다른 열에 대해 WHERE 조건에 의해 제외되었지만 열에 값 표시
Aug 20 2020
DB-Fiddle
CREATE TABLE operations (
id int auto_increment primary key,
orderID VARCHAR(255),
itemID VARCHAR(255),
event_date DATE,
order_volume INT,
shipped_volume INT
);
INSERT INTO operations
(itemID, orderID, event_date, order_volume, shipped_volume
)
VALUES
("Item_01", "Order_XYZ", "2020-05-01", "600", "0"),
("Item_01", "Order_XYZ", "2020-05-18", "0", "315"),
("Item_01", "Order_XYZ", "2020-05-19", "0", "100"),
("Item_01", "Order_MTE", "2020-08-15", "400", "0"),
("Item_01", "Order_OBD", "2020-08-21", "500", "0"),
("Item_01", "Order_OBD", "2020-11-17", "0", "380"),
("Item_02", "Order_TLP", "2020-02-02", "500", "0"),
("Item_02", "Order_TLP", "2020-02-10", "0", "175"),
("Item_02", "Order_ADF", "2020-03-27", "100", "0"),
("Item_03", "Order_BBI", "2020-03-12", "700", "0"),
("Item_04", "Order_DXR", "2020-12-09", "260", "0"),
("Item_04", "Order_DXR", "2020-12-15", "0", "110"),
("Item_04", "Order_DXR", "2020-12-15", "0", "60"),
("Item_04", "Order_FGU", "2020-12-15", "0", "80");
예상 결과:
itemID | orderID | sum(order_volume) | sum(shipped_volume)
--------------|---------------|--------------------------|---------------------------------------
Item_04 | Order_DXR | 260 | 250
Item_02 | Order_TLP | 500 | 175
Item_01 | Order_XYZ | 600 | 415
Item_01 | Order_OBD | 500 | 380
결과에서 나는 모두 나열 할 이상 itemID
과 orderID
그 있습니다 shipped_volume > 0
.
따라서 다음 쿼리를 사용했습니다.
SELECT
itemID,
orderID,
sum(order_volume),
sum(shipped_volume)
FROM operations
WHERE shipped_volume > 0
GROUP BY 1,2;
내가 찾고있는 결과를 거의 얻을 수 있습니다.
내가 가진 유일한 문제 는 조건으로 인해 0
모든 행을 열에 넣는 것 입니다 .sum(order_volume)
WHERE
나는 또한 표시 있도록 변화해야 할 사항은 무엇 sum(order_volume)
무엇을 items
하고 orders
을 가질 수 shipped_volume > 0
?
답변
Gosfly Aug 20 2020 at 16:55
내가 올바르게 이해한다면 이것은 당신이 찾고있는 것일 수 있습니다.
SELECT
itemID,
orderID,
sum(order_volume),
sum(shipped_volume)
FROM operations
GROUP BY 1,2
HAVING sum(shipped_volume) > 0;
여기에서 데모 찾기
1 ChrisSchaller Aug 20 2020 at 16:54
간단하게 우리 HAVING
대신,이 예제를 사용하는 방법의 완벽한 exmaple 곳의 HAVING
필터를 적용하기로 생각 후에 그룹의 결과를 계산!
SELECT
itemID,
orderID,
SUM(order_volume),
SUM(shipped_volume)
FROM operations
GROUP BY itemID, orderID
HAVING SUM(shipped_volume) > 0;
바이올린 업데이트
HAVING
특히 MySQL 에 대한 추가 정보 :https://www.mysqltutorial.org/mysql-having.aspx
참고 : 이 예에서는 서수 대신 명시적인 열 이름 참조를 사용했습니다 . 이에 대한 많은 지원 인수가 있습니다. "더 표현력이 뛰어나고 잘못 이해하기가 더 어렵습니다"로 이동합니다.
- 서수 입력은
GROUP BY
모든 db 엔진 또는 버전에서 지원되지 않습니다. - https://stackoverflow.com/a/45569726/1690217