Как мне заставить MySQL распознавать пользовательские имена столбцов?

#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.4000

2. Должно быть, это больше связано с моей проблемой, потому что ни этот, ни другой формат не работают. Позвольте мне опубликовать полное заявление, которое я пытаюсь сделать.

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'