我有一个任务是从名为food的mysql表中获取两行。
现在,我有一个carbon_footprint
列,其中包含所有食物的碳足迹。我现在必须从mysql表中随机选择两行,但只有一个条件。
这两个值的碳足迹百分比差异应大于等于70%。
我现在能做的最好的事情是:
Select a.* from foods a CROSS JOIN foods b on ((a.co2 - b.co2)/b.co2) >= 0.7 ORDER BY RAND() LIMIT 2
但不知何故,我得不到正确答案。我知道我错过了一些非常愚蠢的东西。
请帮忙!
答案 0 :(得分:0)
我在db表中使用以下值测试了下面的函数:
在没有LIMIT或ROUND()的情况下运行Inner查询。
SELECT
FoodName1 = A.FoodName
, Food1Co2 = A.co2
, FoodName2 = B.FoodName
, Food2Co2 = B.co2
, Number = ABS(((A.co2 - B.co2)/(A.co2)))
FROM TB as A
CROSS JOIN TB B
最后查询全部是:
SELECT * , ABS(((tt.Food1Co2 - tt.Food2Co2)/(tt.Food1Co2)))
FROM (
Select
FoodName1 = A.FoodName
, Food1Co2 = A.co2
, FoodName2 = B.FoodName
, Food2Co2 = B.co2
, Number = ABS(((A.co2 - B.co2)/(A.co2)))
FROM TB as A
CROSS JOIN TB B
) tt
WHERE ABS(((tt.Food1Co2 - tt.Food2Co2)/(tt.Food1Co2))) >= 0.7
ORDER BY RAND() LIMIT 2
注意我是如何将ABS()添加到您的函数中的,因为您的查询将显示负数,因此您需要删除底片并将所有内容转为正数,然后执行RAND()LIMIT。希望这会有所帮助。