hol*_*den 21 sql select aggregate sum count
我有一个查询:
SELECT availables.bookdate AS Date, DATEDIFF(now(),availables.updated_at) as Age
FROM availables
INNER JOIN rooms
ON availables.room_id=rooms.id
WHERE availables.bookdate BETWEEN '2009-06-25' AND date_add('2009-06-25', INTERVAL 4 DAY) AND rooms.hostel_id = 5094
GROUP BY availables.bookdate
Run Code Online (Sandbox Code Playgroud)
返回的内容如下:
Date Age
2009-06-25 0
2009-06-26 2
2009-06-27 1
2009-06-28 0
2009-06-29 0
Run Code Online (Sandbox Code Playgroud)
然后,我如何计算返回的行数...(在这种情况下为5)和年龄的和?使用Count和SUM返回一行?
Count SUM
5 3
Run Code Online (Sandbox Code Playgroud)
谢谢
SWe*_*eko 38
通常,您可以将Query的结果(基本上是一个表)作为另一个查询的FROM子句源插入,因此会写入以下内容:
SELECT COUNT(*), SUM(SUBQUERY.AGE) from
(
SELECT availables.bookdate AS Date, DATEDIFF(now(),availables.updated_at) as Age
FROM availables
INNER JOIN rooms
ON availables.room_id=rooms.id
WHERE availables.bookdate BETWEEN '2009-06-25' AND date_add('2009-06-25', INTERVAL 4 DAY) AND rooms.hostel_id = 5094
GROUP BY availables.bookdate
) AS SUBQUERY
Run Code Online (Sandbox Code Playgroud)
您只需将查询包装在另一个中:
SELECT COUNT(*), SUM(Age)
FROM (
SELECT availables.bookdate AS Count, DATEDIFF(now(),availables.updated_at) as Age
FROM availables
INNER JOIN rooms
ON availables.room_id=rooms.id
WHERE availables.bookdate BETWEEN '2009-06-25' AND date_add('2009-06-25', INTERVAL 4 DAY) AND rooms.hostel_id = 5094
GROUP BY availables.bookdate
) AS tmp;
Run Code Online (Sandbox Code Playgroud)