Mysql 在创建查询以汇总表中出现的次数时需要帮助
我有一个包含如下数据的表:Mysql 在创建查询以汇总表中出现的次数时需要帮助,mysql,sql,Mysql,Sql,我有一个包含如下数据的表: event | session id | uid --------------------- foo | 1 | a bar | 1 | a foo | 2 | b cat | 2 | b cat | 3 | a cat | 4 | c foo | 5 | c cat | 5 | c foo
event | session id | uid
---------------------
foo | 1 | a
bar | 1 | a
foo | 2 | b
cat | 2 | b
cat | 3 | a
cat | 4 | c
foo | 5 | c
cat | 5 | c
foo | 6 | b
foo | 7 | a
dog | 8 | c
dog | 9 | b
bat | 10 | c
uid | foo | bar | cat | total_events
a 2 1 1 4
b 2 1 1 4
我想创建一个查询,以以下格式返回结果:
uid | event | # event used | # of sessions for uid
a | foo | 2 | 4
a | bar | 1 | 4
a | cat | 1 | 4
b | foo | 2 | 4
b | cat | 1 | 4
b | dog | 1 | 4
c | cat | 2 | 5
c | foo | 1 | 5
c | dog | 1 | 5
c | bat | 1 | 5
我尝试使用:
select uid, event, count(*) from events where uid in (select uid from events group by uid) group by uid;
但这并没有达到预期效果
任何帮助都将不胜感激 这可以通过CASE语句实现:
select uid, count(case when event=`foo` then uid else 0 end) as `foo`,
count(case when event=`bar` then uid else 0 end) as `bar`,
count(case when event=`cat` then uid else 0 end) as `cat`,
count((case when event=`foo` then uid else 0 end) + count(case when event=`bar` then uid else 0 end) + count(case when event=`cat` then uid else 0 end)) as totaL_events`
from events group by 1;
这将为您提供如下表格:
event | session id | uid
---------------------
foo | 1 | a
bar | 1 | a
foo | 2 | b
cat | 2 | b
cat | 3 | a
cat | 4 | c
foo | 5 | c
cat | 5 | c
foo | 6 | b
foo | 7 | a
dog | 8 | c
dog | 9 | b
bat | 10 | c
uid | foo | bar | cat | total_events
a 2 1 1 4
b 2 1 1 4
对于其他表格,请使用以下命令:
select uid, event, count(uid) as event_used from events group by 1, 2
这里的桌子不那么花哨:
uid | event | total_events
a foo 2
a bar 1
b foo 2
请记住,按照您的要求,在每种不同的情况下,汇总每个用户的事件总数是不可能的,或者至少是没有效率的。只需通过uid和事件类型即可实现 嗨,这很有效。有一些小的打字错误,但在那之后就没问题了。非常感谢。
select t1.uid, t1.event, count(*) as `# event used`, t2.total_events as `# of sessions for uid`
form table t1
inner join (
select uid, count(*) as total_events
from table
group by uid
) t2 on t2.uid = a.uid
group by t1.uid, t1.event, t2.total_events
order by t1.uid, `# event used` desc