1

我有一个表,我按一列分组,然后输出不同的值和这些值的计数。

activty | sum
-------------
Form    |  1
Login   |  4
Reg     |  3

这是一个示例代码:http ://sqlfiddle.com/#!2/c6faf/2/0

但我想要不同的值 tp 具有一行值(计数)的列名。

像这样:

Form | Login | Reg
------------------
  1  |   4   |  3

我尝试了 PIVOT 操作,但我没有让它工作。我究竟做错了什么?

这是我的代码:http ://sqlfiddle.com/#!2/c6faf/35/0

提前致谢!

br

4

3 回答 3

2

干得好

SELECT 
MAX(CASE activity WHEN 'Form' THEN mysum ELSE NULL END) AS Form,
MAX(CASE activity WHEN 'Login' THEN mysum ELSE NULL END) AS Login,
MAX(CASE activity WHEN 'Reg' THEN mysum ELSE NULL END) AS Reg
FROM (
SELECT activity, COUNT(activity) AS mysum FROM tbl_tracking
            WHERE id = 141 AND variant = 2
            GROUP BY activity
)sq

但在我看来,这种格式化应该在应用层完成,而不是在数据库层。

于 2013-06-07T08:34:28.470 回答
1

尝试这个:

SELECT  
    SUM(IF(activity = 'Form',1,0)) as 'Form',
    SUM(IF(activity = 'Login',1,0)) as 'Login',
    SUM(IF(activity = 'Reg',1,0)) as 'Reg'
FROM 
    tbl_tracking
WHERE 
    id = 141 
    AND variant = 2

Sql 小提琴在这里

于 2013-06-07T08:34:57.810 回答
0

为此,您需要使用数据透视表概念。在这里你也一样。

SELECT
  SUM((IF(activity='Form',1,0))) as Form,
  SUM((IF(activity='Login',1,0))) as Login,
  SUM((IF(activity='Reg',1,0))) as Reg
FROM 
  tbl_tracking
WHERE 
  id = 141 
  AND 
  variant = 2;

小提琴

于 2013-06-07T09:05:59.437 回答