MySQL에서 두 개의 테이블의 행 카운트 차이 찾기
문제
나는 두 개의 테이블이 있고, 하나는 우리가 구입 한 제품과 수량을 저장하고, 다른 하나는 판매를 저장합니다. 따라서 현재 주식은 구매 된 테이블의 모든 수량 열의 합을 판매 테이블의 행 수를 뺀 것입니다. MySQL에서 어떻게 표현할 수 있습니까? 다양한 제품이 있다는 것을 기억하십시오.
편집하다:더 어려워지기 위해 다른 요구 사항이 있습니다. 구매 테이블, 판매 테이블이 있지만 제품 테이블도 있습니다. 모든 제품 목록을 원하고 각 제품의 수량을 알고 싶습니다. 현재 답변의 문제점은 이미 판매하거나 구입 한 제품 만 반환한다는 것입니다. 나는 모든 제품을 원합니다.
해결책
이 시도
SELECT inv_t.product_id, inventory_total-nvl(sales_total,0)
FROM
(SELECT product_id, sum(quantity) as inventory_total
FROM inventory
GROUP BY product_id) inv_t LEFT OUTER JOIN
(SELECT product_id, count(*) AS sales_total
FROM sales
GROUP BY product_id) sale_t
ON (inv_t.product_id = sale_t.product_id)
이것은 게시 된 다른 것 중 일부보다 더 나은 솔루션이며, 일부 제품은 판매 테이블에 해당 행이 없을 수 있다는 사실을 설명하지 않습니다. 그러한 제품이 결과에도 나타나는지 확인하려고합니다.
NVL은 NULL이 아닌 한 첫 번째 인수의 값을 반환하는 Oracle 특정 함수입니다.이 경우 두 번째 인수의 값을 반환합니다. 모든 상업용 DBMSE에는 동등한 기능이 있습니다. MySQL에서 케이스를 동일한 효과로 사용할 수 있습니다.
다른 팁
"인벤토리"및 "판매"테이블을 뷰로 만드는 것이 좋습니다. 재사용 가능하고 최종 쿼리가 매우 간단 해집니다. 분명히 필드와 테이블 이름은 스키마와 일치하도록 변경해야합니다.
--First view: list products and the purchased qty
create or replace view product_purchases as
select
product_id
,sum(purchased_qty) as purchased_qty
from
purchases
group by
product_id;
--Second view: list of products and the amount sold
create or replace view product_sales as
select
product_id
,count(*) as sales_qty
from
sales
group by
product_id;
--after creating those two views, run this query:
select
pp.product_id
,pp.purchased_qty - ps.sales_qty as on_hand_qty
from
product_purchases pp
,product_sales ps
where ps.product_id = pp.product_id;
SELECT product AS prd,
SUM(quantity) -
IFNULL((SELECT COUNT(*)
FROM sells
WHERE product = prd
GROUP BY product), 0)
AS stock
FROM bought
GROUP BY product;
이것은 판매량이 0 일 때도 작동합니다.
제휴하지 않습니다 StackOverflow