首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按多个条目分组

按多个条目分组
EN

Stack Overflow用户
提问于 2016-12-08 07:26:41
回答 1查看 49关注 0票数 0

该数据库有几个表:

  • 旅游
  • 预订
  • 指南

现在每个旅游都可以有n预订,每个导游都可以有n旅游。然而,在我的主页上,我只想显示一个5的名单,每个导游一个旅游限制。然而,如果我从左边的join中获取预订,我需要按"tourId“分组,但在另一边,我也需要按"tourGuideId”分组,以限制为1。如果我组由tourGuideId显示,它只给我显示了每名导游一次,但在左侧联接时会出现问题,并显示预订,尽管没有。如果我使用tourId的组,它适用于左联接,但不适用于每个向导的1。

下面是一个简单的查询:

代码语言:javascript
复制
SELECT f.*, SUM(b.bookingSeats) AS bookings
FROM tours AS f 
LEFT JOIN bookings AS b ON f.tourId = b.bookingTourId 
WHERE f.tourActive = '1'
GROUP BY f.tourGuideId
ORDER BY f.tourId DESC 
LIMIT 5

怎么继续?

编辑1:一个简单的“f.tourGuideId,f.tourId组”不能工作。它使左联接工作,但不限于1的结果,每个指南。

编辑2:示例结果应该是:

代码语言:javascript
复制
tourId, tourGuideId, tourTitle, tourDate, tourActive, bookings
5, 1, 'Hello World', '2016-12-01 08:00:00', 1, NULL
9, 3, 'Tour Paris', '2017-03-01 08:00:00', 1, 3

预订表结构:

代码语言:javascript
复制
bookingId, bookingStatus, bookingUserId, bookingDate, bookingPaid

观光表结构:

代码语言:javascript
复制
tourId, tourGuideId, tourTitle, tourDate, tourActive
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-08 08:27:08

从一个查询开始,该查询获取每个向导的最新巡演,如SQL Select only rows with Max Value on a Column所示。

然后,使用一个子查询连接它,该查询获取每个指南的总预订量。

代码语言:javascript
复制
SELECT f.*, bookings
FROM tours AS f
JOIN (SELECT MAX(tourId) AS maxTourId
      FROM tours
      GROUP BY tourGuideId) AS f1
ON f.tourId = f1.maxTourId
JOIN (
    SELECT tourGuideId, SUM(b.bookingSeats) AS bookings
    FROM tours AS f
    LEFT JOIN bookings AS b ON f.tourId = b.bookingsTourId
    GROUP BY tourGuideId) AS b
ON f.tourGuideId = b.tourGGuideId
ORDER BY tourId DESC
LIMIT 1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41033990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档