目前我有一个简单的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人,结果将是:
以下是我的groups
和group_users
表的当前状态的2个屏幕截图:
是否有可能只在1个SQL请求中执行我想要的操作?感谢
答案 0 :(得分:2)
除了jarlh评论的内容(JOIN
和ON
)。不要在没有明确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中都不是必需的,但设置它是一个好习惯。