Выбор двух строк из одной таблицы с условием - PullRequest
0 голосов
/ 21 апреля 2011

Мне дано задание извлечь две строки из таблицы mysql с именем food.

Теперь у меня есть столбец 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

Но почему-то я не получаю правильный ответ. Я знаю, что упускаю что-то действительно глупое.

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 21 апреля 2011

Я проверил нижеприведенную функцию со следующими значениями в таблице дБ: DataTable1

Выполнение внутреннего запроса без LIMIT или ROUND () возвращает.

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

DataTableResults

Наконец-то запрос:

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. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...