代码之家  ›  专栏  ›  技术社区  ›  Casel Chen

如何编写MySQL查询?

  •  -2
  • Casel Chen  · 技术社区  · 7 年前

    mysql表中的原始数据是:

    APP  EVENT
    app1 clk
    app1 req
    app2 clk
    app1 imp
    app2 req
    

    现在,我想得到以下结果,统计每个应用程序的事件计数

    APP clk imp req
    app1 1  1   1
    app2 1  0   1
    

    如何编写一个sql查询来实现这一点?

    3 回复  |  直到 7 年前
        1
  •  0
  •   LukStorms    7 年前

    您可以按应用程序分组,然后对事件使用条件计数。

    SELECT
    APP,
    COUNT(CASE WHEN EVENT = 'clk' THEN 1 END) AS clk,
    COUNT(CASE WHEN EVENT = 'imp' THEN 1 END) AS imp,
    COUNT(CASE WHEN EVENT = 'req' THEN 1 END) AS req
    FROM yourtable
    GROUP BY APP
    ORDER BY APP;
    

    SQL小提琴示例 here

        2
  •  2
  •   yunzen    7 年前

    MySQL是条件聚合的简写,因此您可以执行以下操作:

    select app, 
           sum(EVENT = 'clk') as clk,
           sum(EVENT = 'imp') as imp,
           sum(EVENT = 'req') as req
    from table t
    group by app;
    

    这个 SQLfiddle 表明它起作用了

        3
  •  1
  •   yunzen    7 年前

    你可以试着用 聚合函数条件

    SELECT APP,
           SUM(CASE WHEN EVENT ='clk' THEN 1 ELSE 0 END) clk,
           SUM(CASE WHEN EVENT ='imp' THEN 1 ELSE 0 END) imp,
           SUM(CASE WHEN EVENT ='req' THEN 1 ELSE 0 END) req
    FROM T
    GROUP BY APP