首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Group By结果行转换为列(PHP MYSQL)

问将Group By结果行转换为列(PHP MYSQL)
EN

Stack Overflow用户
提问于 2014-02-08 20:46:51
回答 2查看 1.3K关注 0票数 0

我有桌子。

代码语言:javascript
复制
Country Status
USA     A
USA     A
USA     B
USA     C
UK      A
UK      D
UK      D
China   A
China   A
China   C
China   C

我想写一个查询,并在表格中显示结果,如下所示。

代码语言:javascript
复制
Country A   B   C   D   Total
USA     2   1   1   0   4
UK      1   0   0   2   3
China   2   0   2   0   4
Total   5   1   3   2  11

$q="SELECT Country,Status,Count(Status) as Stat Group BY Country,Status";
$r=mysql_query($q);
while($o=mysql_fetch_object($r)){
$t .="<tr>
      <td>$o->Country</td>
      <td>$o->Status</td>
      <td>$o->Stas</td>
      </tr>";
}

它会输出。就像上面我想要的。它对国家和状态进行分组,但我不想多次显示国家。我想要将Status的行输出显示为column,并显示它的计数。

代码语言:javascript
复制
USA   A   2
USA   B   1
USA   C   1
UK    A   1
UK    D   2
China A   2
China C   2
EN

回答 2

Stack Overflow用户

发布于 2014-02-08 20:58:38

您可以通过查询或直接进入php代码来完成此操作。在查询中,它被称为PIVOTing表。

它将是:

代码语言:javascript
复制
 select Country, A, B, C, D, (A+B+C+D) Total
   from (
     select Country
            sum(case status = 'A' then 1 else 0 end) as A,
            sum(case status = 'B' then 1 else 0 end) as B,
            sum(case status = 'C' then 1 else 0 end) as C,
            sum(case status = 'D' then 1 else 0 end) as D
       from yourtable
     group by Country
    ) as t

这样做的问题是,对于每个新的status,您必须更改您的查询,添加一个新的sum。

票数 0
EN

Stack Overflow用户

发布于 2014-09-20 00:53:13

我也有同样的需求,下面是我得到的sql结果:

代码语言:javascript
复制
SELECT practiceCode, A, B, C, D, (A+B+C+D) Total
FROM (
   SELECT practiceCode,
        SUM(CASE WHEN TYPE = 1 THEN 1 ELSE 0 END) AS A,
        SUM(CASE WHEN TYPE = 2 THEN 1 ELSE 0 END) AS B,
        SUM(CASE WHEN TYPE = 3 THEN 1 ELSE 0 END) AS C,
        SUM(CASE WHEN TYPE = 4 THEN 1 ELSE 0 END) AS D
   FROM laborder
   GROUP BY practiceCode, TYPE
) AS t
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21646146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档