簡體   English   中英

MySQL:分組有序結果

[英]Mysql: grouping ordered results

假設我有一個school表(cols = "ids (int)")和一個users表(cols = "id (int), school_id (int), created_at (datetime)")

我有一個保存在<school_ids>中的學校ID列表。 我想按最早的created_at值按該學校的用戶的yearweek(users.created_at)值對這些學校進行分組,並為每個組列出yearweek(users.created_at)的值和學校數。

換句話說,我想為每所學校找到最早創建的用戶,然后按該created_at日期的yearweek()結果對學校進行yearweek() ,因此我有每周簽署其第一位用戶的學校數量,有效。

所以,我想要這樣的結果

| 201301 | 22 |  #meaning there are 22 schools where the earliest created_at user 
                 #has yearweek(created_at) = "201301"

| 201302 | 5  |  #meaning there are 5 schools where the earliest created_at user  
                 #has yearweek(created_at) = "201302"

等等

作為健全性檢查,第二列中所有行的總數應等於<school_ids>的大小,即school_ids的id school_ids

那有意義嗎? 我不能完全弄清楚如何在不進行多次查詢和在兩者之間存儲值的情況下獲得此信息。 我敢肯定有一線。 謝謝! 最大

您可以使用一個子查詢,該子查詢返回每個school_id的最小created_at字段,然后可以按年周分組並進行計數:

SELECT
  yearweek(u.min_created_at) AS yearweek_first_user,
  COUNT(*)
FROM
  (
    SELECT school_id, MIN(created_at) AS min_created_at
    FROM users
    GROUP BY school_id
  ) u
GROUP BY
  yearweek(u.min_created_at)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM