sql—如何创建一个mysql条件函数,该函数遍历一个表并接受多个参数

rur96b6h  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(373)

我对pl/sql非常陌生,但我希望根据给定行中几个字段的值为表中的所有条目填充一个空字段。所以,我想把逻辑是,但有几件事,我需要记住,当设置一个表汽车经销商。。。
首先,按不同的二手车ID分组,然后根据…..更新列。。。。。
如果“二手车id”列等于“新车id”,并且“驾驶模式”和“安全等级”都为1,则将“停车位编号”设置为1作为最高优先级。
如果“二手车id”列等于“新车id”,但“驾驶模式”为1,“安全等级”为2,则将“停车位”列设置为2或可用的连续停车位编号
如果有更多类似的情况,但只有安全等级是不同的,然后,我想继续增加停车位号到下一个可用的连续停车位号为该条目
如果“二手车id”列等于“新车id”,但“驾驶模式”为2,“安全等级”为1,则将“停车位”列设置为3,或设置下一个可用的停车位编号
如果“二手车id”列等于“新车id”,但“驾驶模式”为2,“安全等级”为2,则将“停车位号”设置为4,或设置下一个可用的停车位号
同样的规则也适用,如上所述。
如果不满足最高优先级的情况,那么它应该将2用例视为最高优先级,并将其作为parking\u spot=1。
这是一张很小的照片,是我理想中想要的。因此,如图所示,停车位编号为1和2,具体取决于二手车id、新车id、驾驶模式和安全等级是1和2,但一旦二手车id和新车id不同,停车位编号将增加到3和4。

我假设我需要一个函数来输入4个参数,然后根据这些字段返回一个数字作为停车位。但我还是有点不确定该怎么办。任何帮助都将不胜感激。谢谢。

zzwlnbp8

zzwlnbp81#

从你的标签上看不清楚你是在使用oracle数据库还是mysql数据库。这个答案假设了前者。
你的问题有几个空白,但似乎你想给每一行一个序列号的基础上 drive_mode 以及 safety_rating . “你提到” used_car_id column is equal to the new_car_id “好几次,但千万别提他们不平等的时候你想做什么。
对于所写的问题,似乎可以用解析函数以一种相当直接的方式来解决。在本例中,我们将简单地告诉函数按 drive_mode_id 以及 safety_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似乎支持分析函数(又名窗口函数),因此如果您使用的是该版本或更高版本,上述解决方案应该仍然有效(如果不是,这个答案可能会有所帮助)。
要更新它也要考虑 used_car_id = new_car_id 作为排序条件,您需要通过以下方式向订单添加条件:

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

这是未经测试,所以我不能保证这是完全正确的语法,但它应该是接近。

相关问题