簡體   English   中英

我可以在同一張表的多列上使用COUNT()獲得GROUP_CONCAT嗎?

[英]Can I get GROUP_CONCAT with COUNT() on multiple columns from the same table?

我有下表:

CREATE TABLE entries(
  `id` INT UNSIGNED AUTO_INCREMENT,
  `level` INT UNSIGNED,
  `type` CHAR(2),
  `attribute` INT UNSIGNED,
  PRIMARY KEY(id)
);

從此表中,我當前正在對3個不同的列執行相同的查詢:

SELECT level, COUNT(*) FROM entries GROUP BY level;
SELECT type, COUNT(*) FROM entries GROUP BY type;
SELECT attribute, COUNT(*) FROM entries GROUP BY attribute;

我知道我可以使用GROUP_CONCAT在單個SQL調用中為每一個獲取DISTINCT條目:

SELECT GROUP_CONCAT(DISTINCT level) AS levels, GROUP_CONCAT(DISTINCT type) AS types, GROUP_CONCAT(attribute) AS attributes FROM entries;

但是我可以操縱此查詢以包括計數嗎? 或者,是否有其他方法可以在一次調用中獲得這些列的不同值和計數?

編輯:這是一些要添加到表中的數據

INSERT INTO entries (level, type, attribute) VALUES (1, 'VA', 5), (1, 'CD', NULL), (NULL, 'VA', 3), (NULL, 'CD', NULL), (1, 'VA', 1);

和樣品輸出

LEVELS   LEVEL_COUNTS  TYPES  TYPES_COUNTS  ATTRIBUTES    ATTRIBUTES_COUNTS
1        3             VA,CD  3,2           5,3,1         1,1,1

您可以使用以下查詢。 剩下的唯一事情就是添加一些列別名,並可能添加條件以忽略存在NULL的行。

SELECT *
FROM
  (SELECT GROUP_CONCAT(lvlCount.level) as LEVELS,
          GROUP_CONCAT(lvlCount.cnt) as LEVELS_COUNTS
   FROM
     (SELECT LEVEL,
             COUNT(*) AS cnt
      FROM entries where NOT(LEVEL IS NULL)
      GROUP BY LEVEL 
      ORDER BY LEVEL DESC) AS lvlCount) AS LEVEL,

  (SELECT GROUP_CONCAT(typeCount.type) as TYPES,
          GROUP_CONCAT(typeCount.cnt) as TYPES_COUNTS
   FROM
     (SELECT TYPE,
             COUNT(*) AS cnt
      FROM entries where NOT(TYPE IS NULL)
      GROUP BY TYPE
      ORDER BY TYPE DESC) AS typeCount) AS TYPE,

  (SELECT GROUP_CONCAT(attrCount.attribute) as ATTRIBUTES,
          GROUP_CONCAT(attrCount.cnt) as ATTRIBUTES_COUNTS
   FROM
     (SELECT attribute,
             COUNT(*) AS cnt
      FROM entries where NOT(attribute IS NULL)
      GROUP BY attribute
      ORDER BY attribute DESC) AS attrCount) AS attribute;

SQLFiddle: http ://sqlfiddle.com/#!2/4ea92/44

暫無
暫無

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

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