2015-10-13 205 views
0

我有一個MySQL表是這樣的:SQL查詢SUM()和GROUP BY

acco_id | room_id | arrival | amount | persons | available 
1  | 1  | 2015-19-12 | 3  | 4  | 1 
1  | 2  | 2015-19-12 | 1  | 10  | 1 
1  | 1  | 2015-26-12 | 4  | 4  | 1 
1  | 2  | 2015-26-12 | 2  | 10  | 1 
2  | 3  | 2015-19-12 | 2  | 6  | 0 
2  | 4  | 2015-19-12 | 1  | 4  | 1 

什麼我嘗試實現是一個像結果的單一查詢:

acco_id | max_persons_available 
1  | 22 
2  | 4 

我嘗試使用GROUP BY accommodation_id使用類似的查詢:

SELECT 
    accommodation_id, 
    SUM(amount * persons) as max_persons_available 
FROM 
    availabilities 
WHERE 
    available = 1 
GROUP BY 
    accommodation_id 

現在只有acco_id的結果使用所有到達日期。當我添加到查詢沒有更多獨特的acco_id的。

有誰知道一個很好的可以使用表索引的單個SQL?

+1

如何在'max_persons_available'中獲得'22'?它不應該是'20'嗎? –

+0

'2015-26-12' - 這是什麼樣的日期格式? –

+1

所以你說的是,當你添加到你的選擇,它不再分組? ..如果你添加GROUP BY accomodation_id,到達怎麼辦? – DTH

回答

1

如果我理解正確的問題(最後一部分是有點混亂)。你想擁有現在的住宿ID和號碼,但限於具體的抵達日期。

如果是這樣,下面的語句應該做到這一點,因爲它是沒有必要到達選擇,如果你「只」在where語句中使用它。否則,您需要將其放入組中,因此具有非獨特的住宿ID。

SELECT 
    accommodation_id, 
    SUM(amount * persons) as max_persons_available 
FROM 
    availabilities 
WHERE 
    available = 1 and arrival >= '2015-12-19' and arrival < '2015-10-26' 
GROUP BY 
    accommodation_id 
0

我猜(讀你的問題),你正在尋找的是這一點,但林不知道你的問題是有點不清楚:

SELECT 
    accommodation_id, 
    arrival, 
    SUM(amount * persons) as max_persons_available 
FROM 
    availabilities 
WHERE 
    available = 1 
GROUP BY 
    accommodation_id, arrival 
+0

從我的理解來看,他希望整個房間都是獨一無二的,只限於某些到達日期,並且有副作用。但它有點混亂。 – Thomas

+0

@Thomas我的觀點正是如此。我只讀了它,好像他只在選擇accomodation_id時可以分組,但是隻要他加入到選擇它不再分組了。所以我上面的答案可能會覆蓋這個問題。如果多數民衆贊成在問題:) – DTH