1

我正在尝试将按 2 列查询的顺序压缩为按 1 列查询的顺序,并带有细分列。如果它有一个正确的名称,我将不胜感激知道它是什么!

例子:

ocean
name     | type    | colour
fishy    | salmon  | red
splishy  | salmon  | red
splashy  | salmon  | pink
sploshy  | salmon  | pink
floaty   | whale   | blue
humprhey | whale   | grey
wilson   | whale   | grey

寻找(我不确定这样做是什么)

type  | count | colour breakdown
salmon| 4     | 2 red, 2 pink
whale | 3     | 1 blue, 2 grey

优先使用最少的字符串函数。


不知道如何从:

(按一栏排序)

SELECT o.type, count(*)
FROM ocean o
GROUP BY `type`

type  | count
salmon| 4
whale | 3

(按两列排序)

SELECT o.type, o.colour, count(*)
FROM ocean o
GROUP BY `type`, `colour`

type  | colour     | count
salmon| red        | 2
salmon| pink       | 2
whale | blue       | 1
whale | grey       | 2
4

2 回答 2

2

丑陋,未经测试,但可能只是做你想做的事:

SELECT type, SUM(color_count),
   GROUP_CONCAT(CONCAT(color_count, ' ', colour) SEPARATOR ', ') AS colour_breakdown
FROM (
    SELECT type, colour, COUNT(colour) AS colour_count
    FROM ocean
    GROUP BY type, colour
) AS subt
GROUP BY type
于 2013-09-06T17:45:31.317 回答
1

使用您的第二个查询作为数据源,您可以使用它group_concat()来获取您想要的输出:

select type, sum(`count`), group_concat(colBreak separator ',') as color_breakdown
from
    (
        SELECT 
            o.type, 
            o.colour, 
            count(o.type) as `count`, 
            concat(o.colour, ' ', count(o.type)) as colBreak
        FROM ocean o 
        GROUP BY `type`, `colour`
    ) as a
group by type;
于 2013-09-06T17:45:38.230 回答