#mysql #sql #postgresql #ruby-on-rails-4
#mysql #sql #postgresql #ruby-on-rails-4
Вопрос:
У меня есть модель пользователя и модель рабочего места. Пользователь имеет пол поля (m / f), и на каждом рабочем месте много пользователей. Я хочу выбрать количество общего числа пользователей на рабочем месте, а также количество общего числа женщин-пользователей на рабочем месте, сгруппированных по названию рабочего места.
Вот что я попробовал.
User.select("workplaces.name as workplace_name, count(*) as FTE, (count(case when users.gender='m' and users.created_at BETWEEN date_trunc('month', now()) and now() then 1 end)::float - count(case when users.gender='f' and users.created_at BETWEEN date_trunc('month', now()) and now() then 1 else null end)::float)/100 as ratio").joins("INNER JOIN workplaces on workplaces.id=users.workplace_id").group(:workplace_name).order("ratio desc").limit(5).map(amp;:attributes)
Приведенный выше запрос получает пользователей мужского и женского пола на рабочем месте и вычисляет (женщины — мужчины) / 100 как таковой.
Я получаю соотношение как положительных, так и отрицательных значений.
Как мне выбрать только положительные значения / отрицательные значения вычисляемого коэффициента
Спасибо
Комментарии:
1. На данный момент я получаю как положительные, так и отрицательные значения из рассчитанного соотношения. Как выбрать только положительные значения отношения?
2. Как в
ABS
?3.
HAVING
? postgresql.org/docs/current/static/sql-select.html#SQL-HAVING4. может использоваться @pozs, имеющий. Но ratio не является полем / столбцом в таблице. Итак, как это использовать? наличие («отношение> 0») не работает
5. Не существует такого понятия, как отрицательное отношение . Также нет причин делить отношение на 100. Если вам нужно соотношение , это будет
female/male
. Если вам нужен процент , этоfemale/totalEmployees
. Что вы хотите? Это выглядит близко к процентной разнице, но и для этого не подходит.
Ответ №1:
Вы можете использовать HAVING
предложение здесь, поскольку оно принимает любое выражение, а не только столбцы, например:
HAVING (expr_for_ratio) > 0
Кроме того, вы могли бы использовать здесь подзапрос, но это было бы сложно записать в API rails.