반응형
또한 아이가 없을 때 모든 어린이 콜의 합계
MySQL 테이블이 있다products
다음과 같이 표시됩니다.
|--------------------|
| id | parent | sold |
|--------------------|
| 1 | 0 | 1 |
| 2 | 1 | 3 |
| 3 | 1 | 0 |
| 4 | 0 | 2 |
|--------------------|
저는 제품이 몇 번 팔렸는지 결과를 알고 싶습니다.제품의 모든 자녀를 합산해야 합니다.sold
컬럼도 마찬가지입니다.그래서 저는 다음과 같이 쿼리를 사용하려고 했습니다.
SELECT
p1.id,
SUM(p2.sold) + p1.sold AS sold
FROM products p1
JOIN products p2
ON p2.parent = p1.id
WHERE p1.parent = 0;
하지만 난 이해한다:
|-----------|
| id | sold |
|-----------|
| 1 | 4 |
|-----------|
그래서 첫 번째 레코드에는 잘 어울리죠. 아이가 있지만 네 번째 레코드에는 아이가 없기 때문이죠.예상 결과는 다음과 같습니다.
|-----------|
| id | sold |
|-----------|
| 1 | 4 |
| 4 | 2 |
|-----------|
너는 원한다subquery
:
select id, sum(sold) +
( select coalesce(sum(p1.sold), 0)
from products p1
where p1.parent = p.id
) as sold
from products p
where parent = 0
group by id;
추천할 만한 것은left join
그리고.group by
:
SELECT p1.id,
(COALESCE(SUM(p2.sold), 0) + p1.sold) AS sold
FROM products p1 LEFT JOIN
products p2
ON p2.parent = p1.id
GROUP BY p1.id, p1.sold;
조심하셔야 돼요NULL
자녀 없는 부모에 대한 가치관
이 조작은 유효합니다.
select a.id, sum(a.sold+coalesce(b.sold,0)) from products a left join(
select parent, sum(sold) sold
from products group by parent) b on a.id=b.parent
where a.parent=0
group by a.id
왼쪽 외부 결합으로 하고 null 값을 0으로 변경하여 합계가 null로 처리되지 않도록 합니다.
SELECT
p1.id,
SUM(COALESCE(p2.sold,0)) + p1.sold AS sold
FROM products p1
LEFT JOIN products p2
ON p2.parent = p1.id
WHERE p1.parent = 0
GROUP BY p1.id;
전술한 바와 같이, 이 솔루션은 여러 수준의 아이를 다루지 않습니다.
언급URL : https://stackoverflow.com/questions/50532250/sum-of-all-children-cols-also-when-there-is-no-child
반응형
'programing' 카테고리의 다른 글
MySQL에서 페이지 오버플로우(InnoDB)는 어떻게 작동합니까? (0) | 2022.10.04 |
---|---|
PHP 7 인터페이스, 반환 유형 힌트 및 자체 (0) | 2022.10.04 |
눈금 레이블 텍스트 수정 (0) | 2022.10.04 |
Excel이 올바르게 읽을 수 있는 UTF-8 CSV를 PHP로 출력하려면 어떻게 해야 합니까? (0) | 2022.10.04 |
Log4j2에서 로그 수준을 프로그래밍 방식으로 변경합니다. (0) | 2022.10.04 |