mysql中“group by、having、order by、limit”的顺序及用法是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql中“group by、having、order by、limit”的顺序及用法是啥?相关的知识,希望对你有一定的参考价值。
语句顺序select
选择的列
from
表
where
查询的条件
group
by
分组属性
having
分组过滤的条件
order
by
排序属性
limit
起始记录位置,取记录的条数
其中
select
选择的列
from
表
where
查询的条件
以上是基本的结构
group
by
分组属性
having
分组过滤的条件
这个是按照分组属性进行分组,所有分组属性上值相同的记录被分为一组,作为结果中的一条记录,后面的having是对分组进行过滤的条件,必须和group
by一起使用
order
by
排序属性
是对结果集合进行排序,可以是升序asc,也可以是降序desc
limit
起始记录位置,取记录的条数
对记录进行选取,主要用来实现分页功能 参考技术A -- 语法:
select select_list
from table_name
[ where search_condition ]
[ group by group_by_expression ]
[ having search_condition ]
[ order by order_expression [ asc | desc ] ]
[limit m,n]
-- 示例:
-- limit 0,10是从第一条开始,取10条数据
select classno from table_name
group by classno
having(avg(成绩)>70)
order by classno
limit 0,10本回答被提问者采纳
Mysql:在mysql视图中调用mysql存储过程函数
【中文标题】Mysql:在mysql视图中调用mysql存储过程函数【英文标题】:Mysql: Calling mysql stored procedure function inside mysql view 【发布时间】:2021-10-08 04:22:12 【问题描述】:我有一个存储过程和一个单独创建的视图。我试图从存储过程中调用 minVal
和 maxVal
到我的视图,但我不知道为什么我无法使用 MySql Workbench 调用它
存储过程
CREATE DEFINER=`root`@`localhost` PROCEDURE `getMinMaxVal`(
IN age int,
OUT minVal double(8,2),
OUT maxVal double(8,2))
BEGIN
SET minVal = 45.64;
SET maxVal = 55.97;
END
MySql 视图
CREATE
ALGORITHM = UNDEFINED
DEFINER = `root`@`localhost`
SQL SECURITY DEFINER
VIEW `test_view` AS
SELECT
getMinMaxVal(`user_data`.`age`,minVal) AS `min_range`,
getMinMaxVal(`user_data`.`age`,maxVal) AS `max_range`,
FROM
(`reports`
JOIN `user_data` ON (`reports`.`uhd` = `user_data`.`id`))
WHERE
`reports`.`active` = 1
ORDER BY `reports`.`created_at` DESC
【问题讨论】:
什么是getWeightRanges()
,它与getMinMaxval()
有什么关系?
不能在SELECT
查询中使用存储过程。也许你应该写一个函数。但它必须返回一个值,函数不能有OUT
参数。
这能回答你的问题吗? MySQL stored procedure vs function, which would I use when?
@Barmar 哎呀,我错误地粘贴了其他内容。已经更新了上面的代码
@Barmar 你的意思是我们也必须在视图中创建存储过程吗?
【参考方案1】:
您需要使用存储函数,每个值一个。
CREATE FUNCTION getMinVal(IN age INT) RETURN FLOAT
RETURN 45.64;
CREATE FUNCTION getMaxVal(IN age INT) RETURN FLOAT
RETURN 55.97;
CREATE
ALGORITHM = UNDEFINED
DEFINER = `root`@`localhost`
SQL SECURITY DEFINER
VIEW `test_view` AS
SELECT
getMinVal(`user_data`.`age`) AS `min_range`,
getMaxVal(`user_data`.`age`) AS `max_range`,
FROM
(`reports`
JOIN `user_data` ON (`reports`.`uhd` = `user_data`.`id`))
WHERE
`reports`.`active` = 1
ORDER BY `reports`.`created_at` DESC
【讨论】:
非常感谢这对我有用。如果您认为这对其他人有帮助,请投票赞成这个问题,因为我看到许多其他人发现了类似的事情。我希望这个能帮助他们以上是关于mysql中“group by、having、order by、limit”的顺序及用法是啥?的主要内容,如果未能解决你的问题,请参考以下文章