phpMyAdmin -不读取MySQL查询作为数字


phpMyAdmin - not reading MySQL query as numeric

我正在尝试phpMyAdmin中的图形查询结果。下面的查询正确地计算了中位数以及25%和75%的四分位数。但是,当我在页面底部的"查询结果操作"中单击"显示图表"时,它会给我一条错误消息,上面写着"要绘制的数据中没有数字列"。然而,如果我写avg(capital_cost),它将没有任何问题。因此,由于某些原因,mySQL不能将每个四分位数识别为数字。

在我的数据库结构中,"capital_cost"字段设置为类型"decimal(19,2)"。

  select distinct Component, 
   CONCAT('$', format(CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(
  GROUP_CONCAT(capital_cost ORDER BY capital_cost SEPARATOR ','),
   ',', 25/100 * COUNT(*) ), ',', -1) as decimal),2)) AS 'Q1',
 CONCAT('$', format(CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(
  GROUP_CONCAT(capital_cost ORDER BY capital_cost SEPARATOR ','),
   ',', 50/100 * COUNT(*) ), ',', -1) as decimal),2)) AS 'Q2',
 CONCAT('$', format(CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(
  GROUP_CONCAT(capital_cost ORDER BY capital_cost SEPARATOR ','),
   ',', 75/100 * COUNT(*) ), ',', -1) as decimal),2)) AS 'Q3',

from costs_table where Component = "X" and capital_cost is not null

如果有人知道任何额外的功能,我可以添加MYSQL接受这些值作为数字,并正确地绘制它们,请让我知道!

提前感谢:)

答案很简单。您做了很多工作来获得字符串而不是DECIMAL:您如何期望带有"$"符号的CONCAT操作返回字符串以外的任何东西?省略它,将查询简化为:

CAST(
    SUBSTRING_INDEX(
        SUBSTRING_INDEX(
            GROUP_CONCAT(
                capital_cost ORDER BY capital_cost SEPARATOR ','
            ),
            ',', 25/100 * COUNT(*) 
        ), ',', -1
    ) as decimal
) AS 'Q1',
CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(
   GROUP_CONCAT(capital_cost ORDER BY capital_cost SEPARATOR ','),
   ',', 50/100 * COUNT(*) ), ',', -1) as decimal) AS 'Q2',
CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(
    GROUP_CONCAT(capital_cost ORDER BY capital_cost SEPARATOR ','),
    ',', 75/100 * COUNT(*) ), ',', -1) as decimal) AS 'Q3'
FROM
    costs_table 
WHERE 
     Component = "X" and capital_cost is not null

你会没事的。

注意:

我重新格式化了你的第一个表达式,主要是为了确保括号是正确的。