2012-08-29 3 views
1

모두 잘하고 있습니다.id가 다른 경우에만 합계 열

나는 다음과 같은 출력이 ...

 
+---------+--------------+--------------+-----------+---------+----------+ 
| ord_num | signoff_date | program_name | prod_desc | tx_comp | priority | 
+---------+--------------+--------------+-----------+---------+----------+ 
| 1234567 | 2012-08-12 | ilearn  | run  |  1 |  1 | 
| 1234567 | 2012-08-12 | ilearn  | plan  |  1 |  1 | 
| 1234568 | 2012-08-12 | other  | run  |  1 |  1 | 
| 1234569 | 2012-08-12 | other  | run  |  0 |  1 | 
+---------+--------------+--------------+-----------+---------+----------+ 

는 내가 뭘하고 싶은 것은 한 번 독특한 "ord_num"당 tx_compSUM입니다 있습니다.

이제 업무 유형에 따라 sum을 사용하므로 GROUP BY ord_num을 사용할 수 없습니다.

내가 이전에 ord_num이 다른 경우 합이 무엇인지 알아야 할 필요가 있습니까?

모든 아이디어는 크게 감사하겠습니다.

감사합니다.

* 난 후 오전

 
+--------------+------+------+---------+ 
| signoff_date | run | plan | tx_comp | 
+--------------+------+------+---------+ 
| 2012-08-12 | 3 | 1 |  3 | 
+--------------+------+------+---------+ 

EDIT *

SELECT 
    signoff_date, 
    SUM(IF(prod_desc = 'run', 1, 0)) AS run, 
    SUM(IF(prod_desc = 'plan', 1, 0)) AS plan, 
    SUM(tx_comp) AS tx_comp 
FROM 
(
    SELECT 
     ord_num, 
     signoff_date, 
     program_name, 
     prod_desc, 
     tx_comp, 
     priority 
    FROM 
     test.orders 
     LEFT JOIN test.tx_comp USING (ord_num) 
) AS grp 
분명히

하지 원하는 출력은 ...

 
+--------------+------+------+---------+ 
| signoff_date | run | plan | tx_comp | 
+--------------+------+------+---------+ 
| 2012-08-12 | 3 | 1 |  2 | 
+--------------+------+------+---------+ 
+0

하나의 쿼리에서 다른 기준에 따라 서로 다른 합계를 원하십니까? –

+0

@MarcB 예 맞습니다 ... – mybigman

+0

"ord_num이 다른 경우에만"- 무엇부터? 이전 행? –

답변

2

tx_comp의 값이 항상 1 또는 0이면 COUNT()을 활용할 수 있으므로 더 많은 옵션을 제공 할 수 있습니다. 나에게 최종 쿼리 제공

COUNT(distinct IF(tx_comp, ord_num, NULL)) 

: 예를 들어, tx_comp 1이고 우리는 별개의 ord_num를 셀 수

SELECT signoff_date, 
    SUM(IF(prod_desc = 'run', 1, 0)) AS run, 
    SUM(IF(prod_desc = 'plan', 1, 0)) AS plan, 
    COUNT(distinct IF(tx_comp, ord_num, NULL)) as tx_comp 
FROM 
    test.orders 
    JOIN test.tx_comp USING (ord_num) 
    GROUP BY signoff_date 

을 그리고이 경우에는 하위 쿼리에 대한 필요가 없습니다. (편집 :이 (가) 귀하의 JOIN에 업데이트되었습니다.)

본인의 샘플 데이터를 테스트 해 보았습니다. 유일한 의존성은 tx_comp의 의미 론적 성격에있다. 당신은 "SUM"을 말했고, 이것은 값이 최대 1이 될 것이라고 가정합니다 (부울 플래그라는 것을 이해합니다. 다른 대답에 대한 주석에서 1을 반환하는 MAX (tx_comp)에 대해 언급 했으므로, 좋은).

+0

champ ... 너무 단순하지만 아직 열심히 :) thanks heaps – mybigman

+0

tx_comp가 다르면 tx_comp = 1, 2, 3 등이라고 말하고 count 대신 SUM을 원합니다. –

0

어쩌면 단지 대신 SUMMAX를 사용 tx_comp 열? 데이터의 의미에 대해 확신 할 수는 없지만 원하는 내용을 추측하고 있습니다. 실제로 runplan에 대해서도 동일 할 수 있습니다.

그 이유에 대해, 당신이 무엇을 정말로 원하는 당신은 부랑자들과 함께 일하고 있기 때문에 BIT_OR입니다.

+0

답장을 보내 주셔서 감사합니다. 최대 출력은 tx_comp에 대해 1을 제공하기 때문에 작동하지 않습니다. – mybigman