我有这个数据集
dia valor valor_b
=== ===== =======
1 1 b1
1 2 b2
1 1 b3
1 2 b3
2 1 b2
2 3 b1
2 1 b1
2 1 b1
2 1 b2
1 3 b3
5 1 b4
5 3 b1
我需要计算每天valor_b
出现的次数。并在这个结构中显示:
valor dia_1 dia_2 dia_3 dia_4 dia_5
===== ===== ===== ===== ===== =====
1 2 4 0 0 1
2 2 0 0 0 0
3 1 1 0 0 1
我第一次这样做是为了显示value_b
SELECT valor,
group_concat(DISTINCT IF(dia=1, valor_b, NULL)) dia_1,
group_concat(DISTINCT IF(dia=2, valor_b, NULL)) dia_2,
group_concat(DISTINCT IF(dia=3, valor_b, NULL)) dia_3,
group_concat(DISTINCT IF(dia=4, valor_b, NULL)) dia_4,
group_concat(DISTINCT IF(dia=5, valor_b, NULL)) dia_5
FROM test
GROUP BY valor;
但现在计算valor_b
phpmyadmin 会返回此错误
1111 - 无效使用群组功能
这是用过的句子
SELECT valor,
group_concat(DISTINCT IF(dia=1, count(valor_b), NULL)) dia_1,
group_concat(DISTINCT IF(dia=2, count(valor_b), NULL)) dia_2,
group_concat(DISTINCT IF(dia=3, count(valor_b), NULL)) dia_3,
group_concat(DISTINCT IF(dia=4, count(valor_b), NULL)) dia_4,
group_concat(DISTINCT IF(dia=5, count(valor_b), NULL)) dia_5
FROM test
GROUP BY valor;
答案 0 :(得分:1)
我在结果中看不到连接的字符串。那么为什么要使用GROUP_CONCAT
呢?不要只是想要:
select
valor,
sum(dia = 1) as dia_1,
sum(dia = 2) as dia_2,
sum(dia = 3) as dia_3,
sum(dia = 4) as dia_4,
sum(dia = 5) as dia_5
from test
group by valor
order by valor;
这在MySQL中使用了true = 1和false = 0.
我不确定"I need count how many times appear valor_b per day"
究竟是什么意思。计算valor_b
不为空的记录?然后,您必须将其添加到表达式中:
sum(dia = 1 and valor_b is not null) as dia_1,
等
答案 1 :(得分:1)
如果我告诉你的话
SELECT valor,
sum(IF(dia=1, 1, NULL)) dia_1,
sum(IF(dia=2, 1, NULL)) dia_2,
sum(IF(dia=3, 1, NULL)) dia_3,
sum(IF(dia=4, 1, NULL)) dia_4,
sum(IF(dia=5, 1, NULL)) dia_5
FROM test
GROUP BY valor;
答案 2 :(得分:1)
你在这里不需要group_concat
,仅sum
就足够了
SELECT valor,
sum(IF(dia=1, 1, 0)) dia_1,
sum(IF(dia=2, 1, 0)) dia_2,
sum(IF(dia=3, 1, 0)) dia_3,
sum(IF(dia=4, 1, 0)) dia_4,
sum(IF(dia=5, 1, 0)) dia_5
FROM test
GROUP BY valor