Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-计数和分组方式-在一行中显示所有结果_Mysql_Sql_Database - Fatal编程技术网

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

MySQL-计数和分组方式-在一行中显示所有结果,mysql,sql,database,Mysql,Sql,Database,我认为这应该很简单,但我无法解决这个问题 我有一个表项 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

我认为这应该很简单,但我无法解决这个问题

我有一个表项

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

但是这两种方法都会导致一个错误,即组函数的使用无效。您可以使用两种级别的聚合:

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;

嘿,请检查以下功能,它将对任何查询有用,以供以后使用:

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;

干杯

谢谢两位@Pavel Zimogorov和Gordan-我接受了第一个回复,因为他们都是same@KevInSol . . . OP可以接受他/她喜欢的任何答案。但是,你可以在时间范围内移动鼠标(“回答…之前”)。你会看到这个答案比另一个答案早2分55秒。
SELECT Join(CURSOR(select column from tableName)) FROM DUAL;