Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将WHERE与JOIN&;分组_Mysql_Sql - Fatal编程技术网

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磅,等等)。但是,刻度测量到其中的一小部分,更新存储的范围边界以处理不同的精度级别不是一个选项;本质上,您会遇到毫秒问题。如果某个值不是整数计数(甚至是…),则需要将其视为具有实际的无限精度来处理。