sql - MySQL SELECT 与 join、count、order by

标签 sql select join count

我正在尝试按如下方式连接两个表:

tours                                 tours_schedules
---------------------                 ---------------------------------
tour_id | title     |                 schedule_id | tour_id | startdate
---------------------                 ---------------------------------
1       | Day Trip 1                  1           | 1       | 2014-05-23
2       | Day Trip 2                  2           | 1       | 2014-05-24
                                      3           | 2       | 2014-06-01
                                      4           | 1       | 2014-05-17

我想选择的结果将告诉我tours.tour_id、tours.title、tours_schedules中的记录数(其中tours_schedules.tour_id与tours.tour_id匹配)以及最早匹配的tours_schedules.startdate的日期。

结果应该是这样的

results
---------------------------------------------------------------
tour_id  | title         | schedule_count | earliest_startdate 
---------------------------------------------------------------
1        | Day Trip 1    | 3              | 2014-05-17
2        | Day Trip 2    | 1              | 2014-06-01

我搞不定,谁能帮我摆脱痛苦?!以下是我尝试过的众多方法之一。计算tour_schedules 似乎会停止选择多行旅行。

SELECT DISTINCT  t.title, a.startdate, COUNT (DISTINCT a.startdate) AS schedule_count
FROM tours t
INNER JOIN tours_schedules a 
ON t.tour_id = a.tour_id
WHERE t.category_id = 1
ORDER BY a.startdate ASC


SELECT DISTINCT  t.title
FROM tours t
RIGHT JOIN tours_schedules a
ON t.tour_id = a.tour_id
ORDER BY a.startdate


SELECT a.schedule_id, COUNT(a.schedule_id) AS schedule_count, t.title
FROM tours_schedules a
JOIN tours t
ON a.tour_id = t.tour_id
ORDER BY a.startdate

SELECT title, tour_id FROM tours
UNION ALL
SELECT startdate FROM tours_schedules

SELECT t.title, t.tour_id, (SELECT a.startdate)
FROM tours t
JOIN tours_schedules a
WHERE t.tour_id = a.tour_id 

SELECT t.title, t.tour_id, (SELECT a.startdate LIMIT 1), (SELECT COUNT(a.startdate) WHERE t.tour_id = a.tour_id)
FROM tours t
JOIN tours_schedules a
WHERE t.tour_id = a.tour_id

最佳答案

SELECT a.schedule_id, 
       COUNT(a.schedule_id) AS schedule_count, 
       MIN(a.startdate) AS earliest_startdate , 
       t.title
FROM tours_schedules a
JOIN tours t
ON a.tour_id = t.tour_id
GROUP BY t.tour_id

关于sql - MySQL SELECT 与 join、count、order by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22835844/

相关文章:

mysql - 从两列中选择不同的组合

mysql - 从大型 mysql 表中删除重复的文本

sql - 选择时间小于或等于 '12:00' Oracle 的日期

MySQL:优化连接

c# - LINQ + 加入嵌套的 foreach Razor 输出,从 groupby 写出标题行

MySQL 使用中间表查询多种类型的电影

SQL:为具有多个结果的记录创建新列?

sql - Entity Framework 生成的 SQL - SELECT TOP (X) 比 SELECT 多花费 500% 的时间

Angular mat-select value 2 way 使用对象进行数据绑定(bind)

SQL : where vs. 加入中