#mysql #sql #math #floating-point
#mysql #sql #математика #с плавающей запятой
Вопрос:
SELECT Y/X as Z
FROM (
SELECT
(count(county) FROM `cleanup_site_list_2011` WHERE county='kings') as X,
(count(county) FROM `cleanup_site_list_2011` WHERE county='kings' AND people != 0) as Y
FROM `cleanup_site_list_2011`
) as innertable
В приведенном выше примере два «SELECT …» представляют вложенные запросы любого описания (X и Y будут целыми числами). Когда я пытаюсь использовать это утверждение, я получаю сообщение об ошибке
#1054 - Unknown column 'Y' in 'field list'
Как я могу заставить MySQL распознавать имена созданных мной столбцов? Кроме того, как только математика сработает, как мне сделать результат деления с плавающей точкой? Или он делает это автоматически?
Ответ №1:
Один из способов справиться с этим — присвоить столбцам их «пользовательские имена» в подзапросе, а затем использовать эти пользовательские имена в окружающем запросе:
SELECT
Y/X as Z -- moved to outer query
FROM (
SELECT
(...) as X, -- assign custom names in subquery
(...) as Y,
FROM `table`
) as innertable;
Что касается второго вопроса:
mysql> select 4 / 3;
--------
| 4 / 3 |
--------
| 1.3333 |
--------
1 row in set (0.00 sec)
Это отвечает на вопрос? (MySQL 5)
Дополнительная информация здесь.
Комментарии:
1. 1 это работает. краткий выполняемый пример:
SELECT (Y/X) as Z FROM (SELECT 5 AS X, 7 as Y) AS innertable
-> результат 1.40002. Должно быть, это больше связано с моей проблемой, потому что ни этот, ни другой формат не работают. Позвольте мне опубликовать полное заявление, которое я пытаюсь сделать.
3. @MathiasSchnell — Я не могу заставить ваш запрос работать, не хватает
SELECT
ли s в подзапросах?
Ответ №2:
SELECT t1.x, t2.y, t2.y/t1.x z
FROM (SELECT x ...) t1,
(SELECT y ...) t2,
FROM `table`
Комментарии:
1. Вероятно, следовало бы упомянуть, что все запросы относятся к одной таблице.
2. это не работает в той форме, которую вы написали, пример:
SELECT (t1.Y/t2.X) as Z FROM (SELECT 5 AS X) t1,(SELECT 7 AS Y) t2
— t работает, удаляя префиксы t1 и t2, странно. ->SELECT (Y/X) as Z ...
3. ВЫБЕРИТЕ (t1.Y / t2.X) как Z ИЗ (ВЫБЕРИТЕ 5 КАК X из двойного) t1, (ВЫБЕРИТЕ 7 КАК Y из двойного) t2
4. в MySQL нет необходимости использовать dual. в любом случае, попробуйте, также этот запрос не работает и MySQL 5.1 выдает мне следующую ошибку
Unknown column 't1.Y' in 'field list'