突然想到这样的一个需求,思考了一下, 一时没有思路,请教一下大家。
1
flyingfz OP 貌似 用 CASE when 语句, 能解决问题。。。。
|
2
janus77 2018-04-28 15:11:02 +08:00
高考没那么大数据吧 各省自己统计自己的,百万都不到
|
3
iiduce 2018-04-28 15:16:33 +08:00
开玩笑的讲,猜测事实的解决方法有可能是级级上报,这一级解决不了就让小一级的上报,最后是班主任让班长统计一下班里的,很简单啦。
|
4
DreaMQ 2018-04-28 15:20:49 +08:00
先暂且假设你能得到精确到个人的数据
SELECT count(*) FROM <table> WHERE score = ? 对每一个分数跑一次,然后就可以做各种统计了吧 高考全国最多也就千万量级 |
5
vegito2002 2018-04-28 15:27:19 +08:00
group by 分, 然后 count 什么的
不行吗? 前提是分数保存的是整数 |
6
Smilencer 2018-04-28 15:33:00 +08:00
case when + group by
|
7
ReVanTis 2018-04-28 15:34:04 +08:00 1
你们没有意识到这个问题需要生成的实际上是直方图而不是简单的 group by 分数吗。。。
ref: https://stackoverflow.com/questions/1764881/getting-data-for-histogram-plot |
8
layorlayor 2018-04-28 16:01:37 +08:00
窗口函数???
|
10
zst 2018-04-28 16:14:56 +08:00 via Android
高考分一定是整数的(至少我们是)直接 group by+count 就好了吧 按河南(我记得最大的)的量级也就是不到百万 还得文理分开
|
11
qwjhb 2018-04-28 16:15:29 +08:00
这种?
|
12
doubleflower 2018-04-28 16:26:54 +08:00 via Android
循环 1 到 100 查 100 次不就行了
|
13
pmispig 2018-04-28 16:27:18 +08:00
这种静态的没必要一条语句做到,从 0-700,生成 700 条语句执行,写入一个新表就行了
|
14
jydeng 2018-04-28 16:28:47 +08:00
group by,然后 count 最直接了
|
15
worldnode 2018-04-28 16:33:17 +08:00
我突然想到的是,高考要靠 sql ....
|
16
takato 2018-04-28 16:36:15 +08:00
23333
楼主是在统计 orderbook 吗? |
17
bomb77 2018-04-28 16:44:23 +08:00
一年全国的高考学生也就在一千万左右吧,group by 后 count 一下应该不会很慢,而且这种数据也不会变化,取一次就可以缓存起来了。。
|
18
breadenglish 2018-04-28 16:48:51 +08:00
不要性能的话 case when + group by,子查询搞定。要性能的话加个表,存储刻度,然后关联搞定。
|
19
lafuerza 2018-04-28 17:09:03 +08:00
该,最近 V2 上好多错别字
|
20
CEBBCAT 2018-04-28 17:10:13 +08:00 via Android
没听懂,官方不是提供一分一档表吗?难道形势变了?
|
21
banbo 2018-04-28 17:23:24 +08:00
windowing function
|
22
ctsed 2018-04-28 17:30:30 +08:00
es 了解一下
|
23
qf19910623 2018-04-28 17:39:01 +08:00
这种数据考完了就固定了,不会变动,不需要实时查询,可以分区域统计,甚至人工统计层层上报也没什么问题
|
24
beginor 2018-10-22 07:48:23 +08:00 via Android
我来挖个坟, 使用 pg 生成序列函数,从 0 分到满分生成一个序列,再和分数表关联查询,貌似很容易吧
|
25
reus 2018-11-19 17:26:19 +08:00
SELECT count(*), score / 10
FROM scores GROUP BY score / 10 不就行了……想那么复杂 这个查询在 pg 11 下,是并行扫描的 而且,还能建索引 CREATE INDEX ON scores USING btree((score / 10)) |