1
tomwen 2017-10-20 08:42:58 +08:00 via iPhone
select city, company from table order by city,company;
|
2
tigiyj 2017-10-20 08:44:32 +08:00
select * from table order by city asc,company asc
|
5
nestlake OP 继续坐等大神解答,感谢
|
6
nestlake OP 目前,oschina 尚无人能解
|
7
shakoon 2017-10-20 08:48:01 +08:00
第一列根本不知道是什么顺序
|
9
nestlake OP 合肥 3 次,武汉 2 次。。。
|
10
taifus 2017-10-20 08:51:43 +08:00 via Android
刚学 sql,话说 2 楼写的是不是对的。
|
11
nestlake OP 坐等感受出现啊
|
12
nestlake OP 万能的 v2
|
14
Jackliu91 2017-10-20 08:54:02 +08:00 via iPhone
@nestlake 既然要用到次数 先 group by 然后 jion 再 order by 可以。
|
15
tigiyj 2017-10-20 08:57:52 +08:00 1
SELECT
p1.city, p1.company FROM table1 AS p1 LEFT JOIN ( SELECT city, count(city) AS num FROM table1 GROUP BY city ) AS p2 ON p1.city = p2.city ORDER BY p2.num DESC, p1.company ASC 写的比较糙 |
16
x7395759 2017-10-20 09:00:01 +08:00
说实话,你见过 SQL 语句根据数量排序么?
|
24
shyling 2017-10-20 09:17:49 +08:00
窗口函数吧
|
26
zhy0216 2017-10-20 09:19:03 +08:00 via iPhone
Partition by
|
27
Via8veritas 2017-10-20 09:21:45 +08:00 2
select * from test where city in (select city from test group by city having COUNT(*));
|
28
wangzhi 2017-10-20 09:24:04 +08:00 1
没有看明白 不知道是不是这种 select city,compan,count(city) as c from table group by city order by c;
|
29
zjp 2017-10-20 09:28:58 +08:00 via Android 1
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; 写了好久…楼上都已经贴出来了→_→ 楼主这种自顶贴的做法真的很烦。没人回复也不代表就没人会。 |
30
zjp 2017-10-20 09:34:31 +08:00 via Android
@wangzhi 掉坑里了, 用 GROUP BY 语句会丢掉部分分组,每个 city 应该只保留一行。但应该保留哪一行没有定义,MySQL 某个版本后已经默认禁止这样的语句
|
32
king2014 2017-10-20 09:46:43 +08:00
可以考虑增加一个字段比如:city_count,每次插入数据的时候更新同一城市的这个字段,排序的时候再 orderby 下这个字段.哈哈,瞎说的.
|
33
lusheldon 2017-10-20 11:43:36 +08:00 via Android 1
我觉得这种题目挺有意思的,需要比较强的技术能力才能写出来。技术人员首先思考的就是技术问题,能不能做和要不要这么做是两回事。
|
34
liprais 2017-10-20 11:53:48 +08:00 1
15 楼是对的
有些人没写过几个 sql,自己不会写就说用不到,也是可笑 |
35
hsyu53 2017-10-20 12:57:04 +08:00
@Via8veritas 毕业后就没怎么写过 SQL 的,表示没看懂您的思路。另外,having 后面可以没有关系运算符吗?
|
36
fatduo 2017-10-20 14:37:22 +08:00 1
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 |
37
nestlake OP 高手啊
|
38
msg7086 2017-10-20 15:38:54 +08:00
这种 SQL,怎么说呢。
写的时候一时爽,跑起来了○○○。 数据量小也就算了。数据量大的话真不怕后人提着刀来算账吗……嚯嚯 |
42
mooncakejs 2017-10-20 16:41:15 +08:00
支持开窗就简单,select * from test order by count(1) over (partition by city) desc ,company
|
43
nestlake OP @mooncakejs 具体点?
|
44
mooncakejs 2017-10-20 17:29:11 +08:00
@nestlake 就是这条语句,不过 mysql 并不支持。
看文档 mysql 8,0 后可以支持。 |
45
nine99 2017-10-20 17:49:38 +08:00
改设计,城市改成 region code
|
47
mooncakejs 2017-10-20 17:54:27 +08:00
mysql 有个类似的实现避免 join, 扫描结果应该是 O(n)。
select * from test order by find_in_set(city,( select group_concat(city) from (select city from test group by city order by count(1) desc) a)),company ; 这个需求,不能避免全表扫描。 |
48
nestlake OP 谢谢大家,感谢
|
49
nestlake OP 感觉这里的氛围真好
|
50
nestlake OP 谢谢
|