SQL加入与日期关联的数据

时间:2017-03-29 10:04:41

标签: mysql sql

目前我有一个简单的SQL请求,可以在两个日期之间获得所有group departure date和关联的group size(teamLength),但它无法正常运行。

SELECT `groups`.`departure`, COUNT(`group_users`.`group_id`) as 'teamLength'
FROM `groups`
    INNER JOIN `group_users`
ON `groups`.`id` = `group_users`.`group_id`
  WHERE departure BETWEEN '2017-03-01' AND '2017-03-31'

事实上,如果我在两个日期之间有超过1组,那么只有1个日期将与teamLength的总数相关联。

例如,如果我在同一区间内有2组,对于组1,2人,对于组2,1人,结果将是:

SQL Result

以下是我的groupsgroup_users表的当前状态的2个屏幕截图: enter image description here

enter image description here

是否有可能只在1个SQL请求中执行我想要的操作?感谢

2 个答案:

答案 0 :(得分:2)

除了jarlh评论的内容(JOINON)。不要在没有明确GROUP BY的情况下对数据进行分组。我不知道为什么MYSQL仍允许这个......

将您的查询更改为类似的内容,您应该获得所需的结果。目前,其他出发日期在汇总中丢失。

SELECT
    groups.departure,
    COUNT(1) as team_length
FROM
    groups
    INNER JOIN group_users
        ON groups.id = group_users.group_id
WHERE
    groups.departure BETWEEN '2017-03-01' AND '2017-03-31'
GROUP BY
    groups.departure

答案 1 :(得分:1)

我认为您的查询中存在语法问题。您缺少ON语句,因此您的数据库可能会尝试获取笛卡尔积,因为没有连接子句。

SELECT `groups`.`departure`, COUNT(`group_users`.`id`) as 'teamLength'
FROM `groups`
    INNER JOIN `group_users` ON `groups`.`id` = `group_users`.`group_id`
WHERE departure BETWEEN '2017-03-01' AND '2017-03-31'
GROUP BY `groups`.`departure`

您还缺少GROUP BY子句,这在所有RDBS中都不是必需的,但设置它是一个好习惯。