홈>
다음과 같이 설정 한 테스트 데이터베이스가 있습니다 :
CREATE TABLE summary (
row_sid SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
product_list_sid INT,
amount INT,
qty INT
);
CREATE TABLE list_header (
product_list_sid INT
);
CREATE TABLE list_detail (
product_list_sid INT,
product_sid INT
);
CREATE TABLE product (
product_sid SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
product_description VARCHAR(60)
);
INSERT INTO product(product_description) VALUES ("can"), ("bottle");
INSERT INTO list_detail VALUES (1,1), (1,1), (1,2), (2,1), (2,2),(2,2),(2,1);
INSERT INTO list_header VALUES (1), (2);
INSERT INTO summary(product_list_sid, amount, qty) VALUES (1,3,9), (1,15,45), (2,12,36);
요약에서 '수량'및 '수량'값과 함께 요약 된 테이블에 포함 된 모든 제품의 분해 된 목록을 얻을 수있는 방식으로 모든 테이블을 조인하는 쿼리를 작성했습니다. 지금까지 잘하고 있습니다 ...
문의 :
SELECT row_sid, product_description, amount, qty
FROM summary
INNER JOIN list_header ON summary.product_list_sid = list_header.product_list_sid
INNER JOIN list_detail ON list_header.product_list_sid = list_detail.product_list_sid
INNER JOIN product ON list_detail.product_sid = product.product_sid;
결과 :
row_sid product_description amount qty
1 can 3 9
2 can 15 45
1 can 3 9
2 can 15 45
1 bottle 3 9
2 bottle 15 45
3 can 12 36
3 bottle 12 36
3 bottle 12 36
3 can 12 36
이제 'amount'및 'qty'값을 동일한 row_sid를 공유하는 행 수로 나누도록 해당 쿼리를 수정하고 싶습니다.
따라서이 샘플에서 row_sid가 "1"또는 "2"인 모든 행의 1/3은 'amount'및 'qty'값의 1/3이고 row_sid가 "3"인 모든 행의 1/4은 '금액'및 '수량'값이렇게하면 이론적으로 다음 표가 나타납니다.
row_sid product_description amount qty
1 can 1 3
2 can 5 15
1 can 1 3
2 can 5 15
1 bottle 1 3
2 bottle 5 15
3 can 3 9
3 bottle 3 9
3 bottle 3 9
3 can 3 9
이것까지 도달했습니다 :
SELECT row_sid, product_description, amount / COUNT(row_sid) AS amount, qty / count(row_sid) AS qty
FROM summary
INNER JOIN list_header ON summary.product_list_sid = list_header.product_list_sid
INNER JOIN list_detail ON list_header.product_list_sid = list_detail.product_list_sid
INNER JOIN product ON list_detail.product_sid = product.product_sid
GROUP BY row_sid;
수율 :
row_sid product_description amount qty
1 can 1 3
2 can 5 15
3 can 3 9
이것은 계산을 올바르게하지만 GROUP BY는 필요한 다른 모든 행을 잘라냅니다. 그러나 GROUP BY가 없으면 목표에서 더 멀어집니다.
내가 무엇을 놓치고 있습니까?
- 답변 # 1
관련 자료
- mysql - 조인 및 개수 - 왼쪽 조인 만 수행하려고 할 때 문제별로 그룹화
- php - 개수별로 그룹이있는 테이블에서 모든 레코드를 선택하고 싶습니다
- postgresql - GROUP BY 및 COUNT로 Postres SQL 선택
- mysql - sql - 테이블 b의 행 수가 x와 같은 테이블 a의 행 선택
- sql - PostgreSQL의 기준에 따라 그룹 내에서 하나의 행을 선택하십시오
- dataframe - 그룹 별 고유 값 수 계산
- mysql - 두 번 이상 나타나는 중복 데이터 수를 선택하고 각 행을 한 번만 계산하는 방법은 무엇입니까?
- mysql - SQL GROUP BY COUNT 및 포함 0 값
- c# - 행 수를 선택하고 계산
- mysql - 유사한 필드로 그룹화하는 중첩 된 선택 쿼리
- r - 그룹별로 행 순서를 계산하고 그룹이 변경 될 때마다 계산을 다시 시작합니다
- sql - AWS Athena의 테이블에서 그룹당 1000 개의 샘플 선택
- javascript - 세 그룹으로 숫자를 세는 방법 (패턴)
- EXISTS SELECT의 Oracle SQL COUNT
- 외래 키로 SQL Server 그룹화 및 종속 열 선택
- mysql - SELECT 목록의 식 # 29는 GROUP BY 절에 없으며 집계되지 않은 열을 포함합니다
- sql - AVG 함수는 GROUP BY를 사용하는 SELECT에서 올바르게 계산하지만 일부 레코드는 UPDATE를 사용하지 않습니다
- sql - 잘못된 카운트를 반환하는 카운트 선택 (고유)
- sas - 한 행으로 줄이지 않고 그룹 작업 수행
- powerbi에서 그룹별로 그룹을 만드는 방법
관련 질문
- mysql : 중복 GORM을 작성하지 않고 결합 테이블에서 기존 primary_key를 사용하십시오.
- mysql : 여러 기준에 결합하고 하나의보기로 집계
- mysql : 조인 및 유니온을 사용하지 않고 여러 테이블에서 선택
- mysql : 쉼표로 구분 된 GUID에서 쉼표로 구분 된 값 추출
- 3600 미만의 활동별로 다른 mysql 테이블의 사용자 ID별로 세부 정보 정렬
- mysql : 상태에 따라 사용자 확보
- SQL 조인에서 배열을 사용하고 모두 조건을 충족하는지 확인하는 방법은 무엇입니까?
- mysql에서 varchar를 바이너리로 변환합니까?
- MySQL Workbench에서 기본 Blob을 이미지로 만드는 방법은 무엇입니까?
- mysql : 고유 카운트 Postgresql 쿼리를 하이브 SQL로 찾기
같은 쿼리의 그룹 결과에 대한 쿼리와 카운트 사이에 조인이 필요한 것 같습니다.
그룹별로 쿼리 만 사용하는 경우 그룹별로 "데이터를 그룹화"하기 때문에 모든 행을 가지고 있지 않으므로 그룹 별이 동작을 피하기 위해 원래 쿼리와 집계 된 쿼리를 결합 할 수 있습니다. 예 :