Допустим, у меня есть таблица SQL, и я хочу отсортировать ее по результатам расчета.
ID user_id field_id value
10 1 11 name 1
11 1 12 13.22333 // A
12 1 13 45.3322 // B
13 2 11 name 2
14 2 12 120.99 // A
15 2 13 99.343 // B
У меня есть функция sql, подобная этой
calc(float A,float B) {
return A*B;
}
Я должен сортировать пользователей на основе возвращаемого значения из calc, где:
A=value when field_id=12
B=value when field_id=13
select * from table order by calc(A,B)
Кто-нибудь знает правильный синтаксис MYSQL?
Вывод представляет собой список user_id, который сортируется с использованием функции calc
Сделайте самостоятельное соединение:
SELECT A.user_id, calc(A.value, B.value)
FROM table as A
JOIN table as B
ON A.user_id = B.user_id
WHERE A.field_id = 12
AND B.field_id = 13
ORDER BY calc(A.value, B.value)
Использование одного вызова:
SELECT *
FROM (
SELECT A.user_id, calc(A.value, B.value) as Total
FROM table as A
JOIN table as B
ON A.user_id = B.user_id
WHERE A.field_id = 12
AND B.field_id = 13
) as T
ORDER BY Total
Вы можете добиться того же, не используя function
.
Решение 1
SELECT A.user_id, A.value * B.value as calculatedVal
FROM table as A
JOIN table as B
ON A.user_id = B.user_id
WHERE A.field_id = 12
AND B.field_id = 13
ORDER BY (A.value * B.value)
Решение 2
SELECT A.user_id, A.value * B.value as calculatedVal
FROM table as A
JOIN table as B
ON A.user_id = B.user_id
WHERE A.field_id = 12
AND B.field_id = 13
ORDER BY calculatedVal