如何创建一个MySQL条件函数,该函数遍历一个表并接受多个参数
我对PL/SQL非常陌生,但我想根据给定行中几个字段的值为表中的所有条目填充一个空字段。 因此,我想提出的逻辑是,但在为汽车经销商设置表格时,有几件事我需要牢记在心 首先,按不同的二手车ID分组,然后根据……更新列如何创建一个MySQL条件函数,该函数遍历一个表并接受多个参数,mysql,sql,stored-procedures,stored-functions,mysql-5.7,Mysql,Sql,Stored Procedures,Stored Functions,Mysql 5.7,我对PL/SQL非常陌生,但我想根据给定行中几个字段的值为表中的所有条目填充一个空字段。 因此,我想提出的逻辑是,但在为汽车经销商设置表格时,有几件事我需要牢记在心 首先,按不同的二手车ID分组,然后根据……更新列 如果二手车id列等于新车id,且驾驶模式和安全等级均为1,则将停车位编号设置为1作为最高优先级 如果二手车id列等于新车id,但驾驶模式为1且安全等级为2,则将停车位列设置为2或可用的连续停车位编号 如果有更多类似的情况,但只有安全等级不同,那么我希望继续将停车位号增加到该入口的下
- 如果有更多类似的情况,但只有安全等级不同,那么我希望继续将停车位号增加到该入口的下一个可用连续停车位号
- 同样的规则也适用,如上所述
我假设我需要一个函数来输入4个参数,然后根据这些字段返回一个数字作为停车位。但我还是有点不确定该怎么做。任何帮助都将不胜感激。谢谢。从您的标签中不清楚您是在使用Oracle数据库还是MySQL。这个答案假设了前者 您的问题有几处空白,但似乎您希望根据
驾驶模式
和安全等级
为每行指定一个序列号。您多次提到“used\u car\u id”列等于新的\u car\u id
”,但从不提及当它们不相等时要做什么
对于所写的问题,似乎可以用解析函数以一种相当简单的方式来解决。在这种情况下,我们将简单地告诉函数按drive\u mode\u id
和safety\u rating
对行进行排序,并从结果顺序中为每一行指定一个连续数字:
SELECT id,
used_car_id,
new_car_id,
car_features_id,
drive_mode_id,
safety_rating,
ROW_NUMBER () OVER (ORDER BY drive_mode, safety_rating)
AS parking_spot
FROM your_table
WHERE used_car_id = new_car_id
从8.0.2开始,MySQL似乎支持分析函数(也称为窗口函数),因此,如果您使用的是该版本或更高版本(如果不是,可能会有所帮助),上述解决方案应该仍然有效
更新它,也要考虑<代码> UsEdKARYID= NexyCARIDID/COD>作为排序条件,您需要通过以下方式添加一个条件:
SELECT id,
used_car_id,
new_car_id,
car_features_id,
drive_mode_id,
safety_rating,
ROW_NUMBER ()
OVER (
ORDER BY
CASE WHEN used_car_id = new_car_id THEN 1 ELSE 2 END,
drive_mode,
safety_rating)
AS parking_spot
FROM your_table
这是未经测试的,所以我不能保证这在语法上是完全正确的,但应该很接近 PL/SQL是Oracle数据库的过程部分语言,但是您已经标记了mysql。你到底在用什么?正确地标记!!!!如果这是Oracle,为什么我会在你的问题上看到
MySQL
标签???对不起,请容忍我。我不知道PL/SQL只适用于Oracle。这是一个MySQL数据库。我刚刚编辑了问题的名称和标签。感谢大家指出这一点。感谢Allan的回复,我正在使用Mysql数据库。很抱歉,这也是我想提出的另一点。如果二手车id和新车id不相等,则应将其视为比相等的优先级低的优先级。所以,如果有一行是感谢您的回复Allan,我使用的是Mysql数据库。对不起,我本想提那一点的。但是,如果二手车id和新车id不相等,则应将其视为比相等的优先级低的优先级。因此,如果有一行的used_car_id和new_car_id都相等,而不管其他列的值如何,那么它的停车位号应该比不相等的停车位号低。我在想我需要按停车位和按驾驶模式分组。但是我喜欢这个方法,除了不能在Workbench上编译外,你能帮我吗?这个查询有Mysql版本吗,由于Mysql中没有导致错误的函数,如ROW_NUMBER或OVER。我在答案中链接了另一个与模拟该函数有关的问题。@user3116769如果标记不正确,它不是没有用吗???由于您在标题中添加了PL/SQL
,因此人们认为您使用的是Oracle。现在有人给了你们Oracle的解决方案,但你们不能使用它。你只是在浪费每个人的时间!!!