mysql 由价格1,价格2,价格3到价格10字段,先找到不为0值的字段并保存最小值,最小值前面为0的用第二个不为0值填充,最小值后面为0的用最小值填充
时间: 2024-03-22 15:42:41 浏览: 72
可以使用 MySQL 的 CASE WHEN 语句和函数来实现您的需求。
假设您要查询的表名为 `price_table`,价格字段分别为 `price1` 到 `price10`,可以使用以下 SQL 语句来查询:
```
SELECT
price1, price2, price3, price4, price5,
price6, price7, price8, price9, price10,
CASE
WHEN price1 != 0 THEN
LEAST(price1,
CASE
WHEN price2 != 0 THEN price2
WHEN price3 != 0 THEN price3
WHEN price4 != 0 THEN price4
WHEN price5 != 0 THEN price5
WHEN price6 != 0 THEN price6
WHEN price7 != 0 THEN price7
WHEN price8 != 0 THEN price8
WHEN price9 != 0 THEN price9
ELSE price10
END
)
WHEN price2 != 0 THEN
LEAST(price2,
CASE
WHEN price3 != 0 THEN price3
WHEN price4 != 0 THEN price4
WHEN price5 != 0 THEN price5
WHEN price6 != 0 THEN price6
WHEN price7 != 0 THEN price7
WHEN price8 != 0 THEN price8
WHEN price9 != 0 THEN price9
ELSE price10
END
)
WHEN price3 != 0 THEN
LEAST(price3,
CASE
WHEN price4 != 0 THEN price4
WHEN price5 != 0 THEN price5
WHEN price6 != 0 THEN price6
WHEN price7 != 0 THEN price7
WHEN price8 != 0 THEN price8
WHEN price9 != 0 THEN price9
ELSE price10
END
)
WHEN price4 != 0 THEN
LEAST(price4,
CASE
WHEN price5 != 0 THEN price5
WHEN price6 != 0 THEN price6
WHEN price7 != 0 THEN price7
WHEN price8 != 0 THEN price8
WHEN price9 != 0 THEN price9
ELSE price10
END
)
WHEN price5 != 0 THEN
LEAST(price5,
CASE
WHEN price6 != 0 THEN price6
WHEN price7 != 0 THEN price7
WHEN price8 != 0 THEN price8
WHEN price9 != 0 THEN price9
ELSE price10
END
)
WHEN price6 != 0 THEN
LEAST(price6,
CASE
WHEN price7 != 0 THEN price7
WHEN price8 != 0 THEN price8
WHEN price9 != 0 THEN price9
ELSE price10
END
)
WHEN price7 != 0 THEN
LEAST(price7,
CASE
WHEN price8 != 0 THEN price8
WHEN price9 != 0 THEN price9
ELSE price10
END
)
WHEN price8 != 0 THEN
LEAST(price8,
CASE
WHEN price9 != 0 THEN price9
ELSE price10
END
)
WHEN price9 != 0 THEN
LEAST(price9, price10)
ELSE price10
END AS min_price
FROM price_table;
```
这个 SQL 语句会查询 `price_table` 表中的所有价格字段,然后使用 CASE WHEN 语句来判断每个价格字段是否为 0。如果不为 0,则使用 LEAST 函数来计算该字段和后续字段中的最小值。最后,将所有最小值保存在一个名为 `min_price` 的新列中返回。
需要注意的是,如果有多个价格字段同时为最小值,则该 SQL 语句只会返回第一个找到的最小值。如果您需要返回所有最小值,可以将 SELECT 子句中的 `LEAST` 函数改为 `GREATEST` 函数,并将后续字段中的最小值替换为该字段本身,然后在 WHERE 子句中使用 OR 连接符将所有相等的最小值筛选出来。
阅读全文