mysql 判断 距离

mysql 判断 距离,第1张

楼主 请再讲清楚点好吧?

GlangXMeter GlatYMeter, PxMeter PyMeter 各确定一个点 怎么个确定法?

不大明白

快下班了 才看到你的补充

来不及写语句了 思路说下吧 就像高中学的

点1(x1,y1) 点2(x2,y2)

两点距离:(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2) 再平方根就可以了

数据库中应该有平方,平方根的函数

很简单的 只是用在数据库中了而已、

->PERCENT_RANK() OVER w AS pr,

->id, category_id, category, NAME, price, stock

->FROM goods

->WHERE category_id = 1 WINDOW w AS (PARTITION BY category_id ORDER BY price DESC)

| r | pr | id | category_id | category | NAME | price | stock |

| 1 | 0 | 6 | 1 | 女装/女士精品 | 呢绒外套 | 399.90 | 1200 |

| 2 | 0.2 | 3 | 1 | 女装/女士精品 | 卫衣 | 89.90 | 1500 |

| 2 | 0.2 | 4 | 1 | 女装/女士精品 | 牛仔裤 | 89.90 | 3500 |

| 4 | 0.6 | 2 | 1 | 女装/女士精品 | 连衣裙 | 79.90 | 2500 |

| 5 | 0.8 | 1 | 1 | 女装/女士精品 | T恤 | 39.90 | 1000 |

| 6 | 1 | 5 | 1 | 女装/女士精品 | 百褶裙 | 29.90 | 500 |

6 rows in set (0.00 sec)

2.CUME_DIST()函数

CUME_DIST()函数主要用于查询小于或等于某个值的比例。

举例:查询goods数据表中小于或等于当前价格的比例。

mysql>SELECT CUME_DIST() OVER(PARTITION BY category_id ORDER BY price ASC) AS cd,

->id, category, NAME, price

->FROM goods

| cd | id | category | NAME | price |

| 0.5 | 2 | 女装/女士精品 | 连衣裙 | 79.90 |

| 0.8333333333333334 | 3 | 女装/女士精品 | 卫衣 | 89.90 |

| 0.8333333333333334 | 4 | 女装/女士精品 | 牛仔裤 | 89.90 | | 1 | 6 | 女装/女士精品 | 呢绒外套 | 399.90 | | 0.16666666666666666 | 9 | 户外运动 | 登山杖 | 59.90 |

| 0.5 | 7 | 户外运动 | 自行车 | 399.90 |

| 0.5 | 10 | 户外运动 | 骑行装备 | 399.90 |

| 0.6666666666666666 | 12 | 户外运动 | 滑板 | 499.90 |

| 0.8333333333333334 | 11 | 户外运动 | 运动外套 | 799.90 |

| 1 | 8 | 户外运动 | 山地自行车 | 1399.90 |

总之,递归公用表表达式对于查询一个有共同的根节点的树形结构数据,非常有用。它可以不受层级的

限制,轻松查出所有节点的数据。如果用其他的查询方式,就比较复杂了。

3.3 小 结

公用表表达式的作用是可以替代子查询,而且可以被多次引用。递归公用表表达式对查询有一个共同根

节点的树形结构数据非常高效,可以轻松搞定其他查询方式难以处理的查询。

mysql两点间距,你也自己弄成函数

公式如下,单位米:

第一点经纬度:lng1 lat1

第二点经纬度:lng2 lat2

round(6378.138*2*asin(sqrt(pow(sin(

(lat1*pi()/180-lat2*pi()/180)/2),2)+cos(lat1*pi()/180)*cos(lat2*pi()/180)*

pow(sin( (lng1*pi()/180-lng2*pi()/180)/2),2)))*1000)

例如:

SELECT store_id,lng,lat,

ROUND(6378.138*2*ASIN(SQRT(POW(SIN((22.299439*PI()/180-lat*PI()/180)/2),2)+COS(22.299439*PI()/180)*COS(lat*PI()/180)*POW(SIN((114.173881*PI()/180-lng*PI()/180)/2),2)))*1000)

AS

juli

FROM store_info

ORDER BY juli DESC

LIMIT 316


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/7578636.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-07
下一篇2023-04-07

发表评论

登录后才能评论

评论列表(0条)

    保存