标签:null info inf 窗口函数 相关子查询 相关 定义 个数 工作原理
接下来将会介绍使用MySQL解决一些常见问题。一些例子使用 shop 表存储交易商相关商品(商品编号)的价格。假设每个交易商每件商品都有一个固定的价格,那么商品和交易商就是记录的主键。
启动命令行工具mysql并选择一个数据库:
使用以下语句创建并填充示例表:
执行以上的语句后,该表应包含以下内容:
1.查询列最大值
最大商品编号是多少:
2.查询存储某列最大值的行
任务:找出最贵商品的编号、经销商和价格
这使用子查询很容易做到:
还可以使用LEFT JOIN 或者对价格降序排列,并使用MySQL特有的LIMIT子句来获取第一条记录,这2种方法能达到和上面同样的效果:
注意:如果有好几个最贵的商品,价格都是19.95,LIMIT从句将只显示其中一条。
3.每个分组中的列最大值
任务:找出每种商品的最高价格。
4.包含某列的组最大值的行
任务:找到每种商品价格最贵的经销商。
这个问题可以用下面的子查询来解决:
上面的例子使用了一个相关子查询,这样的查询可能是低效的。还可以使用以下几种方式来解决这个问题。
不相关子查询:
LEFT JOIN:
LEFT JOIN 的工作原理是,当s1.price处于其最大值时,没有值更大的s2.price,因此相应的s2.article值为 NULL。
带窗口函数的通用表表达式(CTE):
5.使用用户定义的变量
您可以使用MySQL用户变量来存储结果,而不必将结果存储在客户端的临时变量中。
例如,要查找价格最高和最低的商品,可以执行以下操作:
注意:
也可以将数据库对象(如表或列)的名称存储在用户变量中,然后在SQL语句中使用此变量;但是,这需要使用预编译语句。
标签:null info inf 窗口函数 相关子查询 相关 定义 个数 工作原理
原文地址:https://blog.51cto.com/15023289/2561181