请教大神 SQL 排序问题。难倒我了

2017-10-20 08:40:01 +08:00
 nestlake
请教大神
有一个数据表
city company
合肥 a
上海 b
武汉 c
合肥 d
杭州 e
合肥 f
武汉 g

现在想实现如下排序,怎么弄? group by 好像不行
合肥 a
合肥 d
合肥 f
武汉 c
武汉 g
杭州 e
上海 b

请教大神,SQL 该怎么写??谢谢😘😚😗😙
4944 次点击
所在节点    问与答
50 条回复
x7395759
2017-10-20 09:13:43 +08:00
@nestlake 我建议在生产上不使用复杂的 SQL 语句
x7395759
2017-10-20 09:14:09 +08:00
@nestlake 不对,不是不使用复杂的 SQL 语句,而是不使用效率低的 SQL 语句
tigiyj
2017-10-20 09:14:23 +08:00
@x7395759 实际项目中不会这么用的,lz 应该只是想知道这种排序的 sql 怎么写
shyling
2017-10-20 09:17:49 +08:00
窗口函数吧
shyling
2017-10-20 09:18:39 +08:00
@shyling 好像不是,没仔细看
zhy0216
2017-10-20 09:19:03 +08:00
Partition by
Via8veritas
2017-10-20 09:21:45 +08:00
select * from test where city in (select city from test group by city having COUNT(*));
wangzhi
2017-10-20 09:24:04 +08:00
没有看明白 不知道是不是这种 select city,compan,count(city) as c from table group by city order by c;
zjp
2017-10-20 09:28:58 +08:00
SELECT t1.city, t1.company
FROM your_table AS t1
JOIN
(SELECT city, count(city) city_count
FROM your_table
GROUP BY city) AS t2
ON t2.city = t1.city
ORDER BY city_count DESC, company;

写了好久…楼上都已经贴出来了→_→
楼主这种自顶贴的做法真的很烦。没人回复也不代表就没人会。
zjp
2017-10-20 09:34:31 +08:00
@wangzhi 掉坑里了, 用 GROUP BY 语句会丢掉部分分组,每个 city 应该只保留一行。但应该保留哪一行没有定义,MySQL 某个版本后已经默认禁止这样的语句
king2014
2017-10-20 09:43:35 +08:00
@x7395759 确实这种 sql 纯粹是为了实现而实现的,个人感觉
king2014
2017-10-20 09:46:43 +08:00
可以考虑增加一个字段比如:city_count,每次插入数据的时候更新同一城市的这个字段,排序的时候再 orderby 下这个字段.哈哈,瞎说的.
lusheldon
2017-10-20 11:43:36 +08:00
我觉得这种题目挺有意思的,需要比较强的技术能力才能写出来。技术人员首先思考的就是技术问题,能不能做和要不要这么做是两回事。
liprais
2017-10-20 11:53:48 +08:00
15 楼是对的
有些人没写过几个 sql,自己不会写就说用不到,也是可笑
hsyu53
2017-10-20 12:57:04 +08:00
@Via8veritas 毕业后就没怎么写过 SQL 的,表示没看懂您的思路。另外,having 后面可以没有关系运算符吗?
fatduo
2017-10-20 14:37:22 +08:00
1. select city, count(*) as cnt from table group by city

city cnt
合肥 3
上海 1
武汉 2
杭州 1

2. select a.city, a.company from table a
left join (select city, count(*) as cnt from table group by city) b
on a.city = b.city
order by b.cnt desc, a.company
nestlake
2017-10-20 15:28:57 +08:00
高手啊
msg7086
2017-10-20 15:38:54 +08:00
这种 SQL,怎么说呢。
写的时候一时爽,跑起来了○○○。
数据量小也就算了。数据量大的话真不怕后人提着刀来算账吗……嚯嚯
fatduo
2017-10-20 15:46:32 +08:00
@msg7086 为什么数据量大会慢?不理解。。。。
nestlake
2017-10-20 15:55:33 +08:00
@msg7086 还有没有其他更好地实现方式?暂时只想到这种方法

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

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

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

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

© 2021 V2EX