[英]mysql MIN and MAX functions with if statement
I have an sql query like this: 我有这样的SQL查询:
SELECT IF( (SELECT COUNT(*) FROM `test_table2` WHERE `id` = t.`id`) > 0,
(t.`price` + (SELECT `price` FROM `attribute` WHERE `id` = t.`id` LIMIT 1)),
t.`price`
) AS `full_price`,
MIN(`full_price`) as `min`, MAX(`full_price`) as `max`
FROM `test_table` t
How can i retrieve min and max values without using duplicate code in if statement? 如何在不使用if语句中的重复代码的情况下检索最小值和最大值?
Thanks. 谢谢。
Enclose the calculation of full_price
in a subquery: 在子查询中包含
full_price
的计算:
SELECT
MIN(full_price) AS min_full
, MAX(full_price) AS max_full
FROM
( SELECT IF( (SELECT COUNT(*) FROM test_table2 WHERE id = t.id) > 0
, t.price + (SELECT price FROM attribute WHERE id = t.id LIMIT 1)
, t.price
) AS full_price
FROM test_table AS t
WHERE ... --- if you want conditions applied to `test_table`
--- before calculating the `full_price`
) AS tmp ;
Improvements: 改进:
CASE
clause and not IF
which is only for MySQL. CASE
子句而不是仅用于MySQL的IF
。 (SELECT COUNT ...) > 0
to EXISTS (SELECT ... )
. (SELECT COUNT ...) > 0
改为EXISTS (SELECT ... )
。 It's usually faster. Your query would become: 您的查询将变为:
SELECT
MIN(full_price) AS min_full
, MAX(full_price) AS max_full
FROM
( SELECT
CASE WHEN
EXISTS (SELECT * FROM test_table2 WHERE id = t.id)
THEN t.price + (SELECT price FROM attribute WHERE id = t.id LIMIT 1)
ELSE t.price
END AS full_price
FROM test_table AS t
WHERE ...
) AS tmp ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.