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;