-1
+----+---------+---------+
| id | room_id | user_id |
+----+---------+---------+
|  1 |       5 |      10 |
|  2 |       5 |      20 |
|  3 |       5 |      20 |
|  4 |       6 |      30 |
|  5 |       6 |      40 |
|  6 |       6 |      50 |
|  7 |       7 |      10 |
|  8 |       7 |      10 |
|  9 |       8 |      20 |
| 10 |       9 |      10 |
| 11 |       9 |      10 |
| 12 |       9 |      10 |
+----+---------+---------+

我想选择每个房间的预订数量和续订数量最多的房间

得到这个结果

+---------+----------------+---------------+
| room_id | total_bookings | total_renewal |
+---------+----------------+---------------+
|       5 |              3 |             1 |
|       6 |              3 |             0 |
|       7 |              2 |             1 |
|       8 |              1 |             0 |
|       9 |              3 |             2 |
|       5 |              1 |             0 |
+---------+----------------+---------------+

这个现场mysql在这里 https://paiza.io/projects/Ao2C6d6pgE133QXQAl03Ug?language=mysql

...........

4

1 回答 1

1

考虑到您对续订的要求不明确,使用纯 sql 可以完成这项工作:

select 
  s.room_id, 
  sum(s.total_bookings) as total_bookings, 
  sum(case when s.total_bookings > 1 then s.total_bookings - 1 else 0 end) as total_renewal
from (
  select room_id, user_id, count(*) as total_bookings
  from booking
  group by room_id, user_id
  ) s
group by s.room_id;
于 2020-12-19T03:53:46.967 回答