讓我們說,我有一個喜歡有數據,所以表sign_ins:(真正的表有350萬行)分組SQL查詢(MySQL的) - 爲了通過
+-----------+---------+------------------+
| school_id | user_id | date(created_at) |
+-----------+---------+------------------+
| 1 | 4 | 2009-04-20 |
| 1 | 4 | 2009-04-21 |
| 1 | 4 | 2009-05-06 |
| 1 | 5 | 2009-04-20 |
| 1 | 5 | 2009-06-26 |
| 1 | 5 | 2009-06-26 |
| 2 | 6 | 2009-04-21 |
| 2 | 6 | 2009-06-26 |
| 2 | 7 | 2009-04-20 |
| 2 | 7 | 2009-04-20 |
+-----------+---------+------------------+
created_at
是一個時間字段,但我調用date()來獲取當天。
我有一個「login_days」的概念,它是給定用戶有一個sign_in記錄的不同天數。我想按照登錄日數,最高優先順序排列學校,並返回登錄日數。
因此,看上面的數據,學校1有兩個用戶(4 & 5)。用戶4在3個不同的日子有三個sign_ins,所以3個「login_days」。用戶5有三次登錄,但只有兩個不同的日子,所以2個「login_days」。因此,學校1有5個登錄日。在學校2
來看,它有3天登錄:2的用戶6和1從用戶7.
所以,我想從查詢此回:
+-----------+------------+
| school_id | login_days |
+-----------+------------+
| 1 | 5 |
| 2 | 4 |
+-----------+------------+
我不能完全弄清楚如何做查詢。我開始了與這個(我有ID在那裏< 11部分只是爲了讓我的例子中的數據,而不是我的350萬行整個表):
mysql> select school_id from sign_ins where id < 11 group by school_id, user_id, date(created_at);
+-----------+
| school_id |
+-----------+
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 2 |
| 2 |
| 2 |
+-----------+
8 rows in set (0.00 sec)
我可以看到這裏有5行的學校1和3學校2,看起來像它的工作。但是我需要進一步對它進行分組,並按照分組號碼進行排序,以便在我所需的結果中得到它。這一定很簡單,有人能告訴我我失蹤了什麼嗎?
感謝,最大
完美,謝謝!我知道這件事很簡單,今天下午我的腦子一片混亂。 – 2015-02-24 15:20:32