1

ユーザーごとのメッセージを含むテーブルがあります。

users
----------------
user_id messages
----------------
  725       0
   30       0
 1436       1
10454       4
    .       .
    .       .
 1507      901

テーブルには 74,500 人のユーザーが含まれています。テーブルはASCメッセージ数でソートされます。パーセンタイルごとのツイート数をカウントしたいので、次のようにします。

SELECT SUM(messages) FROM users LIMIT     0, 745;
SELECT SUM(messages) FROM users LIMIT   745, 745;
SELECT SUM(messages) FROM users LIMIT  1490, 745;
.
.
SELECT SUM(messages) FROM users LIMIT 73755, 745;

私はこれを行うことができます、問題ありません。そして、データベースへのクエリを実行するスクリプトを書くことができました。しかし、MySQL にユーザーグループごとのメッセージの総数を出力させることはできないのでしょうか? したがって、出力は次のようになります

group  users         total_messages
-----------------------------------
  1       0 - 745     451
  2     745 - 1490   5627
  .      .      .      .
  .      .      .      .
100   73755 - 74500  2654
4

2 に答える 2

1

これを試して:

select group_id,concat(MIN(user_id) ,'-',MAX(user_id)) as users,
SUM(messages) as messages  
from
  (SELECT ceil(@rownum:= @rownum+1/745 ) AS group_id,user_id,messages
  FROM users, (SELECT @rownum:=0) r
  order by user_id)a
  group by group_id

グループ範囲も表示したい場合は、これを行うことができます

select group_id,concat(MIN(rownum) ,'-',MAX(rownum)) as groups,
concat(MIN(user_id) ,'-',MAX(user_id)) as users,
SUM(messages) as messages
from
  (SELECT ceil(@rownum:= @rownum+1/745 ) AS group_id,@slno:= @slno+1 
  as rownum,user_id,messages
  FROM users, (SELECT @rownum:=0)k,(select @slno:=0) r
  order by user_id)a
  group by group_id
于 2012-07-25T13:23:28.330 に答える
1

このようなもの?

SELECT grp + 1                                       AS `group`,
       CONCAT(grp*grpsize, ' - ', (grp+1)*grpsize-1) AS users,
       SUM(messages)                                 AS total_messages
FROM (
  SELECT   @i:=@i+1, @i DIV grpsize AS grp, grpsize, messages
  FROM     users, (SELECT COUNT(*) / 100 AS grpsize, @i:=0 FROM users) t
  ORDER BY messages
) t
GROUP BY grp
于 2012-07-25T13:04:20.513 に答える