MySQL преобразование в десятичное (5,2) по-прежнему возвращает 0 - PullRequest
1 голос
/ 18 июня 2020

Я пытаюсь получить процент немецких клиентов в таблице клиентов здесь: https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

Я использую этот запрос:

SELECT cast((cast((SELECT COUNT(*) FROM Customers WHERE Country = "Germany") as DECIMAL(5,2))/cast((SELECT COUNT(*) FROM Customers) as DECIMAL(5,2))) AS DECIMAL(5,2)) AS PercentageGermans;

По какой-то причине мне все равно возвращается 0, несмотря на приведение всех составляющих терминала к десятичному виду 5,2.

Я уже искал SO на topi c и нашел этот ответ: { ссылка }

Здесь приведение, которое я пытаюсь выполнить, выполняется примерно так же, как и я:

cast((select count(random_int) from test) as decimal(7,2))

Приведение применяется ко всему подзапросу. Там это работает, что тоже видно на скрипке: http://sqlfiddle.com/#! 15/63252/37

Но я не понимаю, что не так в моем случае.

1 Ответ

2 голосов
/ 18 июня 2020

Я пытаюсь получить процент немецких клиентов в таблице клиентов.

Я думаю, что вы слишком усложняете это. Я бы просто сформулировал ваш запрос как:

select avg(country = 'Germany') ratio_germans from customers

Это дает вам значение от 0 до 1, которое представляет соотношение немецких клиентов. Вы можете превратить его в процентное значение, умножив его на 100. Допустим, вам нужен процент с двумя десятичными цифрами, а затем:

select round(avg(country = 'Germany') * 100, 2) percent_germans from customers
...