Запрос, чтобы получить процент от того, сколько клиентов живет в определенной области

0

У меня есть топор, координатная таблица клиентов, и мне нужно найти процент от того, сколько клиентов живет в определенной области или нет (50,50)

запрос для любого в тестовых данных менее 50:

SELECT X_Coord, Y_Coord
from customerlocation
count where (X_Coord < 50 or Y_Coord < 50)

любой в 50:

SELECT X_Coord, Y_Coord
from customerlocation
count where (X_Coord = 50 or Y_Coord = 50)

Как мне группировать эти запросы, чтобы получить процент от того, кто живет в (50,50) и кто живет внутри диапазона (50,50)?

  • 2
    Добавьте некоторые примеры данных таблицы и ожидаемый результат. (Отформатированный текст, а не изображения.)
  • 0
    Таблица имеет три столбца - custid, X_coord, Y_Coord. Идентификатор клиента в тестовых данных 1 -14. Столбцы X и Y являются случайными ссылками на сетку от (-50, -50) до (50,50)
Теги:
percentage

4 ответа

0
Лучший ответ

Делайте отдельные подсчеты для каждого требования и делите на общий счет

select (a.count / count(*)) * 100, (b.count / count(*)) * 100
from 
(select count(*) as count
  from customerlocation where x_coord < 50 or y_coord < 50) as a,
(select count(*) as count
  from customerlocation where x_coord = 50 or y_coord = 50) as b,
customerlocation
  • 0
    это сработало, спасибо
  • 0
    Отлично, пожалуйста, отметьте ответ как принятый.
0

попробуй это.

select
cast(sum(A.lessthan50) as float)/cast((sum(A.lessthan50) + 
sum(A.anyoneat50)) as float)*100 lessthan50, 
cast(sum(A.anyoneat50) as float)/cast((sum(A.lessthan50) + 
sum(A.anyoneat50)) as float)*100 anyoneat50
from
(
select 
case when (x < 50  or y < 50) then 1 else 0 end as lessthan50,
case when (x = 50 or y = 50) then 1 else 0 end as anyoneat50
from cordinates
) A
0

Я думаю, что это самый простой способ:

select avg( (X_Coord = 50 or Y_Coord = 50) )
from customerlocation
where X_Coord <= 50 or Y_Coord <= 50;

Это может показаться немного сложным, так что вот несколько более подробный вариант:

select sum( (X_Coord = 50 or Y_Coord = 50) ) / sum( (X_Coord < 50 or Y_Coord < 50) )
from customerlocation
where X_Coord <= 50 or Y_Coord <= 50;
0

MySql

Чтобы подсчитать значение X, Y:

SELECT coord_name, count(*) total_count
FROM customerlocation
WHERE X_Coord < 50 OR (Y_Coord < 50)
GROUP BY X_Coord, Y_Coord

Ещё вопросы

Сообщество Overcoder
Наверх
Меню