MYSQL查询平均价格

时间:2016-06-19 20:01:25

标签: mysql

我必须计算格罗宁根一所房子的平均价格。 虽然价格不是作为数字存储而是作为字符串存储(带有一些附加信息),并且它使用点('。')作为千位分隔符。 价格以荷兰语存储为'Vraagprijs'。

表格结果如下:

€ 95.000 k.k.

€ 116.500 v.o.n.

€ 115.000 v.o.n.

然后继续......

我的查询:

'$'SELECT AVG(SUBSTRING(value,8,8)) AS AveragePrice_Groningen 
  FROM properties 
  WHERE name = 'vraagprijs' 
  AND EXISTS (SELECT * 
  FROM estate 
  WHERE pc_wp LIKE '%Groningen%' 
  AND properties.woid = estate.id); 

结果是: 209.47509187620884 但必须是:

20947509187620,884

我怎样才能完成这项工作?

3 个答案:

答案 0 :(得分:1)

AVG(SUBSTRING(价值,8,8))剂量工作:

<强>样品

MariaDB [yourSchema]> SELECT *,SUBSTRING(`value`,8,8), SUBSTRING_INDEX(SUBSTRING_INDEX(`value`, ' ', -2),' ',1) FROM properties;
+----+-----------------------+------------------------+----------------------------------------------------------+
| id | value                 | SUBSTRING(`value`,8,8) | SUBSTRING_INDEX(SUBSTRING_INDEX(`value`, ' ', -2),' ',1) |
+----+-----------------------+------------------------+----------------------------------------------------------+
|  1 | &euro; 95.000 k.k.    | 95.000 k               | 95.000                                                   |
|  2 | &euro; 116.500 v.o.n. | 116.500                | 116.500                                                  |
|  3 | &euro; 115.000 v.o.n. | 115.000                | 115.000                                                  |
+----+-----------------------+------------------------+----------------------------------------------------------+
3 rows in set (0.00 sec)

MariaDB [yourSchema]>

**将其更改为**

AVG(SUBSTRING_INDEX(SUBSTRING_INDEX(`value`, ' ', -2),' ',1))

答案 1 :(得分:0)

尝试使用CAST DECIMAL和SPLIT获取字符串的正确部分

 '$'
SELECT AVG( CAST(SPLIT_STR(value,' ', 2)) AS DECIMAL) AS AveragePrice_Groningen 
FROM properties 
WHERE name = 'vraagprijs' 
AND EXISTS (SELECT * 
FROM estate 
WHERE pc_wp LIKE '%Groningen%' 
AND properties.woid = estate.id);  

答案 2 :(得分:0)

您使用.作为小数分隔符输入数据,这在荷兰语中是正常的,但在英语中不正常,他们倾向于使用,作为小数分隔符。

将数据输入您的数据库为215000.000等,您应该得到正常值作为答案。