2017-02-18 2 views
1

Я использую этот запрос, чтобы узнать процент женщин. Но каким-то образом, когда я объединяю эту операцию в одном запросе, подобном приведенному ниже, он всегда возвращает 1.0.Запрос счетчика Sql всегда возвращается 1

Однако, если я запрашиваю отдельно и делю его, это правильно. Я думаю, что я возился с некоторым синтаксисом здесь.

Что я делаю неправильно?

employees и citizens - это две таблицы.

SELECT (count(e.name)/count(c.name)) 
from citizens as c, employees as e 
where c.gender=false and e.gender=false 
+1

Процент чисел с плавающей запятой. CAST один из результатов подсчета в плавающую точку или умножьте один из них на 1.0, прежде чем делать свое разделение. –

ответ

3

Вы просто создать перекрестное произведение между строками в двух таблицах, а затем подсчет количества строк в результате перекрестном продукта. Вы должны использовать отдельные запросы для расчета каждого счета:

SELECT (SELECT COUNT(*) FROM employees WHERE gender = false)/ 
     (SELECT COUNT(*) FROM citizens WHERE gender = false) 
+0

Получил это. Я думал, что это был перекрестный продукт, потому что, когда я выбирал имена вместо их count-s, это было почти все для всех сопоставлений! –

0

Вы получаете 1, потому что счетчик возвращает integers.You нужно отбрасывать их поплавки, так что вы можете получить процент. Кроме того, в этом случае достаточно только набросать числитель. Это вернет частное в поплавках.

SELECT cast(count(e.name)as float)/count(c.name) 
from citizens as c, employees as e 
where c.gender=false and e.gender=false; 
+1

Если вы даете ответ, предпочтительнее дать [некоторое объяснение, почему ваш ответ] (http://stackoverflow.com/help/how-to-answer). –

Смежные вопросы