簡體   English   中英

MySQL將不同值的計數選擇到單獨的列中

[英]MySQL select count of distinct values into seperate columns

我想獲得按列B分組的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表進行轉換是最佳方法? 提前致謝

@GolezTrol的評論為我指明了正確的方向。 可悲的是,MySQL沒有PivotTables,但是我設法使用以下group 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM