MySQL将不同值的计数选择为单独的列

时间:2017-08-30 13:14:11

标签: php mysql group-by distinct

我想获得A列中每个不同值的行数,如下所示:

------------------------------------------------------
| B | AValue1 | AValue2 | Avalue3 | AValue4 | ......  |
------------------------------------------------------
|B1 |    x    |    x    |    x    |    x    |    x    |
|B2 |    x    |    x    |    x    |    x    |    x    |
|...|    x    |    x    |    x    |    x    |    x    |
-------------------------------------------------------

x是不同的计数。 现在我使用" Group By(A,B)"得到基本相同的数据。 但它的形式是:

----------------------------------------------
| A         |    B     |   Count             |
----------------------------------------------    
| AValue1   | BValue1  |     x               |
| ...       | ....     |     x               |
----------------------------------------------

之后我必须在PHP中或在Javascript中的客户端上转换数据。 我想出第一个表的唯一方法是为A中的每个值做一个子查询选择,但是这样做的目的是使它成为一个更简单,更清晰的解决方案。 有没有一种简单的方法可以在SQL中实现这一点,或者将Group By表转换为最佳方法?在此先感谢

1 个答案:

答案 0 :(得分:0)

@ GolezTrol的评论指出了我正确的方向。 MySQL遗憾地没有数据透视表,但我设法使用以下组concat语句解决它:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(IF(B = ''',
      B,
      ''', 1, 0)) AS `',
      B,
      '`'
    )
  ) INTO @sql
FROM table
SET @sql = CONCAT('SELECT A, ', @sql, ' FROM table GROUP BY A');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;