MySQL - 计数和分组 - 将所有结果显示在一行中

时间:2016-04-21 11:02:12

标签: mysql sql database

我认为这应该很简单,但我无法弄明白或在这里找到解决方案。

我有一个表ITEM_PROPERTIES

item_ID int
property_name char(20)
property_value char(20)

示例数据

5   Colour  Black
5   Size    M   
6   Colour  Blue
6   Size    L   
7   Colour  Purple
7   Size    M   
8   Colour  Blue
8   Size    S   
9   Colour  Wine
9   Size    M   

如果我这样做:

SELECT property_value, count(property_value) 
FROM ITEM_PROPERTIES where property_name='Colour'
group by property_value

我明白了:

Black   1
Blue    2
Purple  1
Wine    1

我怎样才能在一行中得到这个:

Black 1, Blue 2, Purple 1, Wine 1

我试过了:

SELECT group_concat(property_value, count(property_value)) 
FROM ITEM_PROPERTIES where property_name='Colour'
group by property_value

SELECT group_concat(concat(property_value, count(property_value))) 
FROM ITEM_PROPERTIES where property_name='Colour'
group by property_value

但两者都给出错误无效使用群组功能

3 个答案:

答案 0 :(得分:7)

djgpp -E -x c -dM /dev/null

答案 1 :(得分:3)

您可以使用两个级别的聚合:

SELECT group_concat(property_value, ' ', cnt separator ', ')
FROM (SELECT property_value, count(property_value) as cnt
      FROM ITEM_PROPERTIES
      WHERE property_name = 'Colour'
      GROUP BY property_value
     ) ip;

答案 2 :(得分:0)

嘿,请检查以下函数,它对任何后续用途的查询都有用:

CREATE OR REPLACE FUNCTION "JOIN"
(
    p_cursor  sys_refcursor
   ,p_del     VARCHAR2:=','
)
RETURN VARCHAR2
IS
    l_value   VARCHAR2(32767);
    l_result  VARCHAR2(32767);
BEGIN
    LOOP
        FETCH p_cursor INTO l_value;
        EXIT WHEN p_cursor%NOTFOUND;
        IF  l_result IS NOT NULL
        THEN
            l_result:=l_result || p_del;
        END IF;
        l_result:=l_result || l_value;
    END LOOP;

    close p_cursor;
    RETURN l_result;
END JOIN;

要调用此函数,请使用以下示例:

SELECT Join(CURSOR(select column from tableName)) FROM DUAL;

干杯