gpt4 book ai didi

mysql - 按多个条目分组

转载 作者:行者123 更新时间:2023-11-29 11:08:13 25 4
gpt4 key购买 nike

数据库有几个表:

  • 旅游
  • 预订
  • 指南

现在每个旅行团可以有n个预订,每个导游可以有n个旅行团。然而,在我的主页上,我只想显示 5 个旅行团的列表,每个导游仅限 1 个旅行团。但是,如果我从左连接获取预订,我需要按“tourId”进行分组,但在另一边,我还需要按“tourGuideId”进行分组,限制为 1。如果我 GROUP BYtourGuideId 它只向我显示每个导游的一次旅行,但在 LEFT JOIN 中出现了问题,并显示了预订,尽管没有。如果我GROUP BYtourId,它可以与 LEFT JOIN 一起使用,但不限于每个指南 1 个。

这是简单的查询:

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:简单的“GROUP BY f.tourGuideId, f.tourId”不起作用。它使 LEFT JOIN 工作,但不限制每个指南 1 个结果。

编辑 2:示例结果应为:

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

预订表结构:

bookingId, bookingStatus, bookingUserId, bookingDate, bookingPaid

游览表结构:

tourId, tourGuideId, tourTitle, tourDate, tourActive

最佳答案

从获取每个指南的最新游览的查询开始,如 SQL Select only rows with Max Value on a Column 中所示。

然后将其与子查询连接起来,获取每个导游的总预订量。

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

关于mysql - 按多个条目分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41033990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com