MySQL 求助, group by 城市行业后获取工资最低的一条数据

2019-09-11 13:51:36 +08:00
 sytnishizuiai

例如字段有 id,city,business,money 4 个字段,我想要获取各个 city 下不同 business 下的最低 money 并得到 id,

我试了好几种方法,每次获取的值都是 id 靠前的,即便使用 MIN ( money ),id 也是无法对应。

4935 次点击
所在节点    MySQL
34 条回复
sytnishizuiai
2019-09-11 14:58:17 +08:00
@ayonel only_full_group_by 肯定改了,你说的应该是链接内第一个答案,我 5.7.26 ,我试了 N 次了,因为我搜索到的大部分解决方案都是这个
lolizeppelin
2019-09-11 15:01:05 +08:00
统计分析请换 pg 2333
ayonel
2019-09-11 15:11:04 +08:00
@sytnishizuiai 不明白这种写法为什么会报错,这符合标准 sql 规范。我 5.7.21
dexterzzz
2019-09-11 15:27:52 +08:00
window 函数,sql 基础技术
1runningbird
2019-09-11 16:13:55 +08:00
自己 join 自己
akira
2019-09-11 16:31:40 +08:00
@sytnishizuiai 10l 的方案应该是可以出正确答案的,city 和 money 不匹配的话,应该是 bussiness 那边的影响。 用 9l 的表写出来大概这样

select demo.id, a.* from demo ,
(
select city,business, min(money) `min_money` from demo
group by city, business
) a

where demo.city = a.city and demo.business = a.business and demo.money = a.min_money
sytnishizuiai
2019-09-11 16:42:53 +08:00
@akira 我项目和帖子的 demo 我都试过,获得的结果,min(money)只是额外多一列最小值(加上或去掉,其他数据都没变化),所以 MIN 的值和同行其他字段是匹配不上的,所以会导致外面的 select 也没用了。
akira
2019-09-11 17:07:47 +08:00
@sytnishizuiai 你是不是漏了 group by。
pmsg863
2019-09-11 17:27:15 +08:00
开窗函数了解下。
hfc
2019-09-11 18:00:15 +08:00
mark
前两天我也想做类似的处理,一直搞不定,后来直接改表结构了😂,来你这一看,原来是 5.7 之后没法那么用了...
xux9311
2019-09-11 18:27:16 +08:00
@sytnishizuiai min(money)和 city 在 group by city 的情况下怎么会不匹配呢。可能我理解错你的问题了,(city, business)是 unique index 吧?
robert233
2019-09-11 19:19:23 +08:00
mysql 8.0 新增了窗口函数
sytnishizuiai
2019-09-12 11:00:21 +08:00
@xux9311 我是 5.7 的,我在自己项目和帖子内的简易 demo (无索引)都试过,确实会出现匹配不上的情况
sytnishizuiai
2019-09-12 11:01:07 +08:00
@gz911122
@dexterzzz
@pmsg863
@robert233 谢谢,学习了!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/600001

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX