2016-02-29 117 views
0

我對mySQL相當陌生,但真的很絕望。請儘量讓我容易。SQL:選擇特定的值輸出

我想創建一個關於酒店的報告。現在,我的查詢可以告訴我,有多少次預訂了多少次不同的旅程。

舉個例子:

SELECT i.numberofnights, 
    SUM(CASE WHEN i.nod >='1' THEN '1' ELSE '0' END) as journeyCount 
    FROM itinerary i 
    WHERE i.arrival BETWEEN '2015-01-01' AND '2015-01-31' 
    GROUP BY i.numberofnights 

我的輸出:

NoN | journeyCount 
1  | 18 
2  | 6 
3  | 4 
4  | 13 
5  | 12 
6  | 5 
7  | 9 

它表明我有18個行程與1夜,6 2晚等。我的願望是做出選擇,所以結合1至3晚和4至7晚的結果。 請幫幫我!

我想要的輸出:

NoN | journeyCount 
1-3 | 28 
4-7 | 39 

預先感謝您! :)

+0

固定範圍或者根據用戶的輸入而改變? –

+0

他們是固定的,但最終我需要五個不同的範圍。 – Vivess

回答

1

您可以使用整數除法GROUP BY子句中:

SELECT (i.numberofnights-1) DIV 3, 
     SUM(CASE WHEN i.nod >=1 THEN 1 ELSE 0 END) as journeyCount 
FROM itinerary i 
WHERE i.arrival BETWEEN '2015-01-01' AND '2015-01-31' 
GROUP BY (i.numberofnights-1) DIV 3 

如果你想只有兩個段,一個用於<=3,另一個用於> 3,那麼你可以使用:

SELECT IF(CASE WHEN i.numberofnights <= 3 THEN 0 ELSE 1 END = 0, '1-3', '4-7') AS NoN, 
     SUM(CASE WHEN i.nod >=1 THEN 1 ELSE 0 END) as journeyCount 
FROM itinerary i 
WHERE i.arrival BETWEEN '2015-01-01' AND '2015-01-31' 
GROUP BY CASE WHEN i.numberofnights <= 3 THEN 0 ELSE 1 END 

編輯:

爲了得到這樣的「1-3」桶標籤,「4-6」,等你可以使用下面的查詢:

SELECT CONCAT(((i.numberofnights-1) DIV 3 + 1) * 3 - 2, 
       '-', 
       ((i.numberofnights-1) DIV 3 + 1) * 3) AS NoN, 
     SUM(CASE WHEN i.nod >=1 THEN 1 ELSE 0 END) as journeyCount 
FROM itinerary i 
WHERE i.arrival BETWEEN '2015-01-01' AND '2015-01-31' 
GROUP BY (i.numberofnights-1) DIV 3 

Demo here

+0

第一個解決方案效果很好,非常感謝!有沒有辦法重新命名第一列的值,所以我會得到一個顯示不同時間間隔的結果?像1-3,4-6等? – Vivess

+0

@Vivess請檢查我所做的修改。 –

+0

非常感謝你!它工作完美,你真棒! – Vivess