mysql中的多个分组/排序


Multiple grouping/sorting in mysql

我有一个包含三个字段的表:username, postName, post。如何首先按postName分组,然后按用户名分组。例如,我的表中有4行

  1. username1, Convo1, My First Post
  2. username1, Convo1, My Second Post
  3. username2, Convo1, My First Post
  4. username3, Convo2, My First Post

我如何将Convo1组合在一起(总数为3),然后将用户名组合在一起(因此计数变为2,因为第1行和第2行具有相同的用户名)。有办法做到这一点与一个查询?

下面的查询应该可以做到。(当然要用whateverTableName代替)

SELECT postName, count(*) uniqueUsers
FROM
(  SELECT username, postName, count(*)
   FROM whateverTableName
   GROUP BY username, postName ) subqry1
GROUP BY postName
样本输出:

postName uniqueUsers
-------- -----------
Convo1             2
Convo2             1

相同的解决方案,但作为一对视图,用于不喜欢使用复杂查询的框架:

CREATE VIEW convo_by_user_post
AS
SELECT username, postName, count(*)
   FROM whateverTableName
   GROUP BY username, postName;
CREATE VIEW convo_unique_users
AS
SELECT postName, count(*) uniqueUsers
FROM convo_by_user_post
GROUP BY postName;

然后从你的应用程序:

SELECT postName, uniqueUsers FROM convo_unique_users