2017-03-10 2 views
1

이 같은 mysql 데이터베이스에 테이블이 있습니다.쿼리 sum SUM with condition

id | product | warehouse | price | date_shipping 
------------------------------------------------ 
1 | Salt | 15 | 300 | 2017-03-08 
2 | Salt | 15 | 300 | 2017-03-09 

나는 여러 가지 조건에 해당 열 가격SUM 싶다. 이것이 바로 조건입니다.

제품 소금은 창고가 동일한 경우 ID 번호가 SUM이 아니기를 원하지 않습니다.

이것은 두 번째 조건입니다. 제품 소금에서

id | product | warehouse | price | date_shipping 
------------------------------------------------ 
1 | Salt | 15 | 300 | 2017-03-08 
2 | Salt | 18 | 300 | 2017-03-09 

창고 내가 SUM 가격 값에 원하는 다른 ID를 가지고있는 경우.

이것은 내가 쿼리에서 원하는 결과입니다. 첫 번째 조건에서

:

salt | 15 | 300 

초 상태에서 :

salt | 15,18 | 600 

이 내가하고있는 것을 쿼리입니다.

SELECT product, GROUP_CONCAT(warehouse SEPARATOR ',') as warehouse, SUM(price) 
FROM db_product 

누군가가이 문제를 해결할 수 있습니까? 고맙습니다.

+0

이 염은 그의'price' 할 당신이 원하는 같은 창고가있는 경우 용도? 그 논리는 무엇입니까? –

+0

그 예제의 첫 번째'date_shipping'에서 ** 2017-03-08 ** @TimBiegeleisen – Antonio

답변

0

두 개의 집계가 필요합니다. 첫 번째는웨어 하우스의 각 제품에 대해 가장 빠른 출하 날짜를 갖는 레코드를 식별합니다. 그런 다음 두 번째 집계는 각 제품에 대한 창고를 그룹화하는 데 필요합니다.

SELECT t.product, 
     GROUP_CONCAT(t.warehouse) AS warehouses, 
     SUM(t.price) AS total 
FROM 
(
    SELECT t1.product, 
      t1.warehouse, 
      t1.price 
    FROM db_product t1 
    INNER JOIN 
    (
     SELECT product, warehouse, MIN(date_shipping) AS min_date_shipping 
     FROM db_product 
     GROUP BY product, warehouse 
    ) t2 
     ON t1.product  = t2.product AND 
      t1.warehouse  = t2.warehouse AND 
      t1.date_shipping = t2.min_date_shipping 
) t 
GROUP BY t.product 

출력 : 여기

enter image description here

데모 :

Rextester

+0

좋아, 먼저 해보겠습니다. – Antonio