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_CONCAT
和CONCAT
的组合。
查询
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`);
美好的一天,亲爱的同事们!
拜托,有人可以告诉我如何从 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_CONCAT
和CONCAT
的组合。
查询
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`);