Приведите результат запроса как десятичный в MySQL - PullRequest
0 голосов
/ 15 ноября 2018

Что у меня есть:

  • Мариадб версия: 10.3.10

У меня есть таблица visits, которая имеет 2 столбца userid и ref_url, где userid - это идентификатор пользователя, а ref_url соответствует URL-адресу, с которого ссылался userid. Пустые места в столбце ref_url соответствуют прямым посещениям и не учитываются.

Таблица: vists

-------------------------------------
|  userid |        ref_url          | 
-------------------------------------
|      1  |                         |
|      1  | https://demosite.com    | 
|      1  | https://demosite2.com   |
|      1  |                         |
|      1  | https://demosite3.com   | 
|      1  |                         |
-------------------------------------

Чего я ожидаю достичь:

Я хочу создать запрос, который будет подсчитывать общее количество ref_url вхождений для определенного userid, исключая пустые пробелы (в поле ref_url), ограничивать счет в пределах 100 и умножать его на 0,5 и представлять результат как DECIMAL для столбца псевдонимов estimated value.

------------------------------------
|  userid |    estimated value     | 
------------------------------------
|      1  |       1.50             |
------------------------------------

Мой запрос:

SELECT userid,
       CAST(((
              SELECT COUNT(NULLIF(TRIM(ref_url), ''))
                  FROM visits
                  LIMIT 0,100
             ) * 0.5) AS DECIMAL(12,2)) AS 'estimated value'
FROM visits

GROUP BY userid

Приведенный выше запрос вызывает синтаксическую ошибку:

У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы найти правильный синтаксис для использования рядом с '2))

Запрос работает, когда DECIMAL(12,2) заменяется на UNSIGNED.

Запрос при использовании с DECIMAL (12,2) выводит с Adminer, но приводит к

[1329] Нет данных - ноль строк выбирается, выбирается или обрабатывается

при попытке непосредственно на Мариадб. Есть ли вероятность проблем с разрешением?

1 Ответ

0 голосов
/ 16 ноября 2018

LIMIT происходит после сбора данных.Ваш подзапрос собирает только одну строку, поэтому LIMIT не имеет значения.Однако, поскольку вы используете MariaDB (не MySQL), вы можете сказать

LIMIT ROWS EXAMINED 100

(Предостережение: я не проверял это.)

Ссылка: https://mariadb.com/kb/en/library/limit-rows-examined/ -начиная с MariaDB 5.5.21

Что касается DECIMAL - вместо CAST(expression AS DECIMAL(10,2)) используйте

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