SQL查询SUM()AND GROUP BY

时间:2015-10-13 07:36:06

标签: mysql database

我有一个像这样的MySQL表:

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?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我猜(读你的问题)你在寻找的是这个,但我不确定你的问题有点不清楚:

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