MySQL三列分组数据

MySQL Group data of three columns

美好的一天,亲爱的同事们!

拜托,有人可以告诉我如何从 3 列中创建一个组吗?比如在一个table中有A、B、C三列相同类型的数据,分别存储相同类型的数据,如:"bread"、"water"、[=28] =].我们还有日期栏。

看起来像:

Col_A     | Col_B     | Col_C   | Date       
--------- | --------- | ------- | ---------- 
Bread     | Null      | Water   | 19.01.2016 
Bread     | Bread     | Water   | 22.02.2016 
Chocolate | Chocolate | Null    | 18.03.2016

我想计算按月分组销售了多少产品? 预期结果:

January -> Bread 1, Water 1
February ->Bread 2, Water 1
March -> Chocolate 2

对于一列,我使用了如下查询:

SELECT A, COUNT(A) FROM MyDB GROUP BY month(Date)

但是我不知道如何同时计算 3 列? 提前感谢您的帮助!

当然,您必须将它们全部放在一栏中:)

SELECT my_column, COUNT(my_column) FROM (
    SELECT Col_A AS my_column FROM your_table
    UNION ALL
    SELECT Col_B FROM your_table
    UNION ALL
    SELECT Col_C FROM your_table
) sq
GROUP BY my_column;

您还应该考虑重新设计您的数据库。如您所见,table 不是最优的。

使用UNION ALL获取值作为列并使用GROUP_CONCATCONCAT的组合。

查询

select z.`Month`, group_concat(concat(z.`Col`, ' ', z.`Count`) separator ', ') `Col` from(
  select t.`Date`, monthname(t.`Date`) as `Month`, t.`Col`, count(t.`Col`) as `Count` from(
    select `Col_A` as `Col`, `Date` from `your_table_name`
    union all
    select `Col_B`, `Date` from `your_table_name`
    union all
    select `Col_C`, `Date` from `your_table_name`
  )t
  group by monthname(t.`Date`), t.`Col`
)z
group by z.`Month`
order by month(z.`Date`); 

SQL Fiddle