【问题标题】:How to count database occurrence when grouped by a field按字段分组时如何计算数据库出现次数
【发布时间】:2019-04-25 11:52:18
【问题描述】:

我有一个有 2 行的表,比如说“用户”和“操作”。它是这样布局的 -

user    |    action

bob          page view
mike         detail view
bob          page view
mike         page view
bob          detail view

我想按用户对查询进行分组,并像这样计算所述用户的每个操作发生 -

bob = (2) page views (1) detail view
mike = (1) page view (2) detail views

我尝试过 group by,但它限制每个查询为 1,因为它是这样分组的 -

$sql = "SELECT * FROM table GROUP BY user";

然后使用 if 语句 -

if($action == 'page view'){
    $pv++;
}

我知道有一种正确的方法可以在不使用 if 语句的情况下在语句中执行此操作,但不确定如何......谢谢!

【问题讨论】:

    标签: php sql group-by count


    【解决方案1】:

    是的,也许 sql 可以直接做到这一点 Select user,count(*),(distinct action) from table group by user

    【讨论】:

      【解决方案2】:

      如果您希望数据库引擎在一行中返回每个用户的总页面/详细视图,则必须使用条件分支语句。以下查询将返回您的所有用户以及他们的页面视图和详细视图:

      SELECT user,
      SUM(CASE WHEN action = 'page view' THEN 1 ELSE 0 END) AS page_view,
      SUM(CASE WHEN action = 'detail view' THEN 1 ELSE 0 END) AS detail_view
      FROM table
      GROUP BY user;
      

      【讨论】:

      • 这非常聪明,谢谢!
      【解决方案3】:

      您可以直接在 SQL 中执行:

      SELECT user, action, count(*) as total
      FROM table 
      GROUP BY 1, 2
      

      【讨论】:

      • 谢谢!您能稍微解释一下这是如何工作的吗?1 和 2 在分组中代表什么?
      • GROUP BY 1, 2 相当于 GROUP BY 用户、操作。
      • 那么使用这种方法,我在哪里可以获得每个用户的不同分组操作?我是否使用类似 $user = $row['user'] 和 $action = $row['total'] 的东西?
      • 上述查询将首先按用户分组,然后按操作(页面视图、详细视图)并输出每个出现次数。 Bob 将有 2 行:(1) bob - 页面视图 - 2 和 (2) bob - 详细视图 - 1
      • 是MySql语法吗?
      猜你喜欢
      • 2020-10-02
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      • 2013-03-31
      相关资源
      最近更新 更多