Mysql 将WHERE与JOIN&;分组
这是我的表格结构: 团队Mysql 将WHERE与JOIN&;分组,mysql,sql,Mysql,Sql,这是我的表格结构: 团队 t_id => int(11) t_name => varchar(256) s_id => int(11) s_amount => int(11) s_date => date team_id => int(11) 销售 t_id => int(11) t_name => varchar(256) s_id => int(11)
t_id => int(11)
t_name => varchar(256)
s_id => int(11)
s_amount => int(11)
s_date => date
team_id => int(11)
销售
t_id => int(11)
t_name => varchar(256)
s_id => int(11)
s_amount => int(11)
s_date => date
team_id => int(11)
我想为所有团队总结特定时期内的所有销售情况。这是我的SQL命令:
SELECT
t_name,
SUM(s_amount) as total_amount,
FROM teams
JOIN sales ON sales.team_id=teams.t_id
GROUP BY sales.team_id
WHERE s_date BETWEEN '2013-09-01'
AND '2013-09-08';
如果我在phpmyadmin中执行此命令,它会显示:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE s_date BETWEEN '2013-09-01' AND '2013-09-08' L' at line 10
我做错了什么?
WHERE
子句应该在分组依据之前
SELECT
t_name,
SUM(s_amount) as total_amount
FROM teams
JOIN sales ON sales.team_id=teams.t_id
WHERE s_date BETWEEN '2013-09-01' AND '2013-09-08'
GROUP BY sales.team_id;
WHERE
子句应位于分组依据之前
SELECT
t_name,
SUM(s_amount) as total_amount
FROM teams
JOIN sales ON sales.team_id=teams.t_id
WHERE s_date BETWEEN '2013-09-01' AND '2013-09-08'
GROUP BY sales.team_id;
顺序不对
SELECT
t_name,
SUM(s_amount) as total_amount
FROM teams
JOIN sales ON sales.team_id=teams.t_id
WHERE s_date BETWEEN '2013-09-01'
AND '2013-09-08'
GROUP BY sales.team_id;
在组员之前的位置:
1.SELECT子句
2.从条款
3.WHERE条款
4.按条款分组
5.有条款
6.按条款排序
(似乎是一个不错的选择,除了快速解析之外,顺序似乎是错误的,因为它是为了作者的优化偏好而列出的。在这方面,它是一个不错的选择。但是对于复制和粘贴列表以可视化子句的顺序,它不是:)顺序是错误的
SELECT
t_name,
SUM(s_amount) as total_amount
FROM teams
JOIN sales ON sales.team_id=teams.t_id
WHERE s_date BETWEEN '2013-09-01'
AND '2013-09-08'
GROUP BY sales.team_id;
在组员之前的位置:
1.SELECT子句
2.从条款
3.WHERE条款
4.按条款分组
5.有条款
6.按条款排序
(似乎是一个不错的选择,除了快速解析之外,顺序似乎是错误的,因为它是为了作者的优化偏好而列出的。在这方面,它是一个不错的选择。但对于复制和粘贴列表以可视化子句的顺序,它不是:))检查总金额后的逗号
@StuartLC:感谢您的发现,CtrlC CtrlV和太低质量的模式匹配导致错误…Re:From before select-来自类似于FWR的链接文章。从逻辑上讲,以这种方式思考可能是好的,也就是说,映射/投影完成得很晚(例如,.Net Linq查询语法延续了这一点),但我想RDBMS需要先选择:)本文按照逻辑处理的顺序列出了子句,不是查询的编写方式,我是个白痴:我假设我的代码中存在错误,然后我查阅了mysql()参考手册。然后我重新排列了我的代码到给定的顺序。。。但我在那一点上失败了。感谢您的帮助检查total_amount
@StuartLC:感谢您的发现,CtrlC CtrlV和太低质量的模式匹配导致错误…Re:From before select-来自类似于FWR的链接文章。从逻辑上讲,以这种方式思考可能是好的,也就是说,映射/投影完成得很晚(例如,.Net Linq查询语法延续了这一点),但我想RDBMS需要先选择:)本文按照逻辑处理的顺序列出了子句,不是查询的编写方式,我是个白痴:我假设我的代码中存在错误,然后我查阅了mysql()参考手册。然后我重新排列了我的代码到给定的顺序。。。但我在那一点上失败了。感谢帮助@ppeterka 66的相同错误,请检查total\u amount
后的逗号。@ppeterka 66的相同错误,请检查total\u amount
后的逗号。请避免在之间使用-详细说明处理日期/时间/时间戳类型时的一些问题(其中一些是特定于SQL Server的)。虽然在这种情况下,你很可能要处理“工作日”,但它不太可能伤害你。尽管如此,几乎所有的范围都应该使用唯一的上限(@Clockwork Muse
之间的关键字是错误的,是的,但幸运的是它确实做到了我希望它在这里做的事情。将来我会记住你的评论并使用
不,实际上,你通常想要使用包含的下限(=
)。例如:按重量运输包裹。范围通常为“整数”金额(例如,3磅,其次是5磅,等等)。但是,刻度测量到其中的一小部分,更新存储的范围边界以处理不同的精度级别不是一个选项;本质上,您会遇到毫秒问题。如果某个值不是整数计数(甚至是…),需要将其处理为具有实际的无限精度。请避免在
之间使用-详细说明处理日期/时间/时间戳类型时的一些问题(其中一些是特定于SQL Server的)。虽然在这种情况下,你可能要处理“工作日”,但它不太可能会伤害你。尽管如此,几乎所有范围都应该使用排他性上限(@Clockwork Muse
之间的关键字是错误的,是的,但幸运的是它做了我希望它在这里做的事情。将来我会记住你的评论并使用
不,实际上,你通常希望使用包含性下限(=
)。例如:按重量运输包裹。范围通常为“整数”数量(例如,3磅,其次为5磅,等等)。但是,刻度测量到其中的一小部分,更新存储的范围边界以处理不同的精度级别不是一个选项;本质上,您会遇到毫秒问题。如果某个值不是整数计数(甚至是…),则需要将其视为具有实际的无限精度来处理。