@HAtan

Как найти баланс по каждому пользователю (сумма по оператору каждого пользователя)?

Как можно посчитать сумму по номерам с определенным оператором? Например хочу определить с кодом оператора "90". Но если использовать запрос ниже, то там сразу всплывают проблемы в том, что надо дописывать код страны или "___90%" так поиск делать. Так же если использовать OR то если будет совпадени хоть одно, то посчитает 3значения, если AND использовать то надо полное совпадение по 3м столбцам.
60805523927d1949283877.png
SELECT  ID, tel_balance1 + tel_balance2 + tel_balance3
 FROM    telephone WHERE tel1 LIKE "38090%" OR tel2 LIKE "38090%" OR tel3 LIKE "38090%"

C OR
608059ce77a81582940655.png
CREATE TABLE `telephone`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `tel1` bigint(20) UNSIGNED NULL DEFAULT NULL,
  `tel2` bigint(20) UNSIGNED NULL DEFAULT NULL,
  `tel3` bigint(20) UNSIGNED NULL DEFAULT NULL,
  `tel_balance1` decimal(65, 2) NULL DEFAULT 0,
  `tel_balance2` decimal(65, 2) NULL DEFAULT 0,
  `tel_balance3` decimal(65, 2) NULL DEFAULT 0,
  `birthday` date NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
)


И ещё вопрос, можно ли как то посчитать количество номеров с определёнными операторами.
Например

operator code | сount
50 | 10
63 | 15
67 | 1
90 | 8
  • Вопрос задан
  • 36 просмотров
Пригласить эксперта
Ответы на вопрос 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Можно сделать так:
SELECT 
  ID, 
  tel_balance1 * (tel1 LIKE "38090%") + 
  tel_balance2 * (tel2 LIKE "38090%") + 
  tel_balance3 * (tel3 LIKE "38090%") AS balance_38090
FROM 
  telephone 
WHERE 
  tel1 LIKE "38090%" 
  OR tel2 LIKE "38090%" 
  OR tel3 LIKE "38090%"
;


SQL online

Хотя лучше прочитать про нормализацию данных и привести таблицы к нормальной форме
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы