【问题标题】:Count user actions using two different MySQL tables使用两个不同的 MySQL 表计算用户操作
【发布时间】:2020-03-06 14:08:51
【问题描述】:

我有两张桌子; userstexts

users保存用户信息,如用户名、密码等

texts 保留一些文本和一些附加列,例如added_from、updated_from、deleted_from,因此当用户进行特定操作时,他的用户名会写入相关列的文本记录中(如果我更新我的用户名写入的文本updated_from 列)。

我想根据 added_from、updated_from、deleted_from 列计算所有用户操作,结果必须类似于

Username | Added | Updated | Deleted
 ========|=======|=========|======
  user_1 |     1 |       9 |       0
  user_2 |     5 |       9 |       2

我尝试使用的查询是

SELECT t.added_from,
COUNT(t.added_from) AS Added,
COUNT(t.updated_from) AS Updated
FROM users u, texts t
WHERE u.username = t.added_from
GROUP BY u.username ORDER BY u.id ASC

但它仅显示在文本中找到的第一个用户名的结果。 我想打印用户表中的所有用户名,并根据他们的用户名在添加、更新或删除的列中显示的次数来计算他们的所有操作

【问题讨论】:

  • 为什么user_1会出现两次?
  • @Strawberry 您的编辑似乎删除了有用的信息(您的链接接受的答案中的第 3 点,“迄今为止的最大努力”)。这是故意的吗?
  • @JobCurtis - 哦,我明白你的意思了。哎呀。固定
  • 为什么 user_1 出现两次? >>> 更正

标签: mysql sql join group-by pivot


【解决方案1】:

我认为您需要条件聚合。逻辑应该是这样的:

select
    u.username,
    sum(u.username = t.added_from)   added,
    sum(u.username = t.updated_from) updated,
    sum(u.username = t.deleted_from) deleted
from users u
inner join texts t 
    on u.username in (t.added_from, t.updated_from, t.deleted_from)
group by u.username

【讨论】:

  • 非常感谢。它显示正确的结果,但仅计算用户名存在于文本表中这 3 列中的任何一个的用户所做的操作。是否可以显示 users 表中的所有用户,如果他们从未执行过操作,则计数为 0?
  • @akis_m:只需将 inner join 更改为 left join
  • 它的魔力(我不适合加入)。再次感谢。效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
相关资源
最近更新 更多