我正在尝试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
你会没事的。
注意:
我重新格式化了你的第一个表达式,主要是为了确保括号是正确的。