2013-07-28 3 views
0

편집 : 테이블을 변경했습니다. 업데이트 된 표 참조하십시오 내 샘플 테이블에서필드 결합시 계산하십시오.

post   status  
------------- ------------- 
post1   delivered 
post2   undelivered 
post3   delayed 
post4   delivered 
post5   undelivered 

그것은 delivered의 수와 단일 쿼리에서 결합 undelivered + delayed의 수를 얻을 수 있습니까? 이처럼

:

post   status  
------------- ------------- 
delivered  2 
undelivered  3 
+1

결과가 1 행으로 나왔나요? 또는 2 행 괜찮습니까? 2이면 2 개의 쿼리 사이에 UNION을 사용할 수 있습니다. 이게 도움이 되나요? – Artem

+0

원하는 출력은 무엇입니까? –

답변

2
SELECT 
    SUM(IF(status = 'delivered', 1, 0)) as `delivered_count`, 
    COUNT(postid) as `all_count` 
FROM 
    table 

이 잘 작동해야 발생합니다. 이것은 단지 deliveredundelivered 상태 인이 계정 -이 더 있지만, 여전히이 두 가지를 계산하려면 다음, 당신이 할 수 있습니다 : 당신이 deliveredundelivered 카운트 개별적하려면

SELECT 
    SUM(IF(status = 'delivered', 1, 0)) as `delivered_count`, 
    SUM(IF(status = 'delivered' OR status = 'undelivered', 1, 0)) as `all_count` 
FROM 
    table 

것은, 당신이 GROUP BY을 사용할 수 있습니다 : delivered, undelivereddelayed는 유일하게 사용할 수있는 상태입니다

SELECT 
    COUNT(postid), 
    status 
FROM 
    table 
WHERE 
    status IN ('delivered', 'undelivered') 
GROUP BY 
    status 
0
SELECT COUNT(*) 
FROM table 
GROUP BY status = 'delivered' 
ORDER BY status = 'delivered' DESC 

이것은

count of delivered 
count of everything else 
0

가정하면,

SELECT SUM(CASE WHEN status = 'delivered' THEN 1 END) `delivered`, 
     SUM(CASE WHEN status <> 'delivered' THEN 1 END) `delayed + undelivered` 
FROM tableName 

당신의 편집에 따라

╔═══════════╦═══════════════════════╗ 
║ DELIVERED ║ DELAYED + UNDELIVERED ║ 
╠═══════════╬═══════════════════════╣ 
║   2 ║      3 ║ 
╚═══════════╩═══════════════════════╝ 

, 당신은 여러 행을 갖고 싶어 OUTPUT,

SELECT CASE WHEN status = 'delivered' THEN 'delivered' 
        ELSE 'undelivered' 
     END post, 
     COUNT(*) totalCount 
FROM tableName 
GROUP BY CASE WHEN status = 'delivered' THEN 'delivered' 
        ELSE 'undelivered' 
      END 

OUTPUT

당신은 단지 세 가지 상태를 가지고, 당신은 배달 항목의 수와 하나의 행하고 전달되지 못한 + 지연 항목의 수와 하나 개의 행을 원하는 경우
╔═════════════╦════════════╗ 
║ POST  ║ TOTALCOUNT ║ 
╠═════════════╬════════════╣ 
║ delivered ║   2 ║ 
║ undelivered ║   3 ║ 
╚═════════════╩════════════╝ 
+0

내 테이블에는 여기에 표시되지 않았지만 'created DATETIME' 필드가 있습니다. 검색어를 사용하면 월별로 그룹화 된 각 금액을 표시 할 수 있습니까? – enchance

+0

예. 어떤 검색어로 나를 달 단위로 그룹화하여 수정 하시겠습니까? –

+0

작성한 첫 번째 쿼리. – enchance

0

, 당신은이 쿼리를 사용할 수 있습니다

SELECT 
    CASE WHEN status = 'delivered' THEN status 
     ELSE 'undelivered+delayed' END status, 
    COUNT(*) cnt 
FROM 
    yourtable 
GROUP BY 
    CASE WHEN status = 'delivered' THEN status 
     ELSE 'undelivered+delayed' END 
관련 문제