代码之家  ›  专栏  ›  技术社区  ›  diggersworld

在一个查询中对MySQL中的多行进行计数

  •  6
  • diggersworld  · 技术社区  · 14 年前

    我现在有一个表,它存储了许多项目的统计数据,如视图、下载、购买等。要获取每个项目的单个操作计数,我可以使用以下查询:

    SELECT *, COUNT(*)
    FROM stats
    WHERE operation = 'view'
    GROUP BY item_id
    

    这给了我所有的项目和他们的视图计数。然后,我可以将其他变量的“视图”更改为“购买”或“下载”。但是,这意味着对数据库进行三次单独的调用。

    能一次就把三个都拿出来吗?

    1 回复  |  直到 14 年前
        1
  •  11
  •   Konerak    14 年前
    SELECT item_id, operation, COUNT(*) 
    FROM stats 
    WHERE operation IN ('view','purchase','download') 
    GROUP BY item_id, operation
    

    将返回带有 每个项目和操作一行 包含三列:项ID、操作类型和具有该项ID的行数。

    1 view 3
    1 purchase 5
    2 download 7
    3 download 1
    

    如果您想要所有物品的ID,您可以省略Where,并且您可以订购Count(*)以获得最流行的或其他的物品。取决于您要查找的内容或如何使用数据。

    如果你想要列 挨着对方 使用IF:

    SELECT s1.item_id, SUM( IF( s1.operation = 'view', 1, 0 ) ) views, SUM( IF( s1.operation = 'download', 1, 0 ) ) downloads, SUM( IF( s1.operation = 'purchase', 1, 0 ) ) purchases
    FROM stats s1
    GROUP BY s1.item_id
    
    item_id | views | downloads | purchases
    1 | 3 | 0 | 5
    2 | 0 | 7 | 0
    3 | 0 | 1 | 0