我在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接受这些值作为数字并正确绘制它们,请告诉我!
提前谢谢你:)
答案 0 :(得分:1)
答案很简单。你做了很多事情来得到一个字符串,而不是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
你应该没事。
注意:
我重新格式化了你的第一个表达式,主要是为了确保我的方括号正确。