#mysql #sql #aggregate-functions
#mysql #sql #агрегированные функции
Вопрос:
Я использую следующие запросы и получаю разные результаты.
SELECT SUM(amt) FROM table1 WHERE id in (114,116) and another_id = 10;
result is 10 20 = 30
SELECT SUM(amt) FROM table1 WHERE id in (REPLACE("116,114",'"',"")) and another_id = 10;
result is 10
мне предложили использовать функцию разделения строк и поместить разбиения в таблицу, может кто-нибудь указать мне на пример?
Ответ №1:
ВЫБЕРИТЕ СУММУ (amt) Из таблицы1, ГДЕ идентификатор в (ЗАМЕНИТЬ(«116,114″,'»‘,»»)) и another_id = 10;
Было бы полезно, если бы мы знали, что вы пытаетесь сделать.
Я предполагаю, что вы хотите предоставить средство, в котором кто-то может указать набор идентификаторов и передать это в качестве аргумента запросу.
Простым решением было бы:
WHERE CONCAT('%,', id, ',%') LIKE ('${submitted_string}')
Но это не позволит использовать какой-либо индекс на table1.id
AFAIK в MySQL нет способа привести массив / строку к табличному типу, поэтому вам нужно было бы проанализировать строку и поместить значения temporaril; y в таблицу вместе с ключом, ссылающимся на сеанс (или во временную таблицу). Выполнение этого в SQL — довольно сложная работа — намного проще использовать логический уровень сверху — который, исходя из моей интерпретации того, чего вы пытаетесь достичь, у вас уже должен быть.
Ответ №2:
Судя по вашему коду, ID является числовым полем…
Попробуйте это для второго примера…
SELECT SUM(amt) FROM table1 WHERE "," CAST(id AS CHAR) "," in ("," "116,114" ",")
and another_id = 10;