SQL Server 每个用户标识的SQL平均混乱计数

13z8s7eq  于 2022-11-21  发布在  其他
关注(0)|答案(2)|浏览(96)

我需要计算由不同的users_id发送的消息的平均数量。我在表“comments”下有消息,在表“user”下有不同的users_id。它们在另一个表“tickets”的使用下以如下方式连接:

left outer join tickets t on c.ticket_id = t.ticket_id
left outer  join "users" u on u.user_id  = t.requester

我也不知道该从哪里开始。

select user_id,
count avg (distinct c.ticket_id)
from "comments" c
group by ticket_id
left outer join tickets t on c.ticket_id = t.ticket_id
left outer  join "users" u on u.user_id  = t.requester
where t.created_at between '2022-10-01' and '2022-10-31'
xqkwcwgp

xqkwcwgp1#

这 可能 会 得到 您 想要 的 结果 。 公用 表 表达式 计算 每个 票证 的 评论 数 , 然后 选择 按 用户 分组 的 每个 票证 的 平均 计数 。

with UserTicketCount (user_id, ticket_id, theCount) as
(
      select u.user_id
           , t.ticket_id
           , count(c.comment_id) as theCount
        from users u
   left join tickets t
          on t.requester = u.user_id
   left join comments c
          on c.ticket_id = t.ticket_id
   group by u.user_id, t.ticket_id
)
select user_id
     , avg(theCount) as AvgCommentPerTicket
  from UserTicketCount
group by user_id;

中 的 每 一 个

htrmnn0y

htrmnn0y2#

我们 将 从 最初 的 查询 中 开始 提问 :

select user_id,
count avg (distinct c.ticket_id)
from "comments" c
group by ticket_id
left outer join tickets t on c.ticket_id = t.ticket_id
left outer  join "users" u on u.user_id  = t.requester
where t.created_at between '2022-10-01' and '2022-10-31'

中 的 每 一 个
有 鉴于 此 , 我们 需要 做出 一些 改变 :

  • joinwhere 必须 列 在 group by 之前
  • 这 不是 SQL Server 日期 文字 的 正确 格式 。 对于 仅 包含 日期 的 值 , 请 使用 you should skip the - separators and just have yyyyMMdd
  • 如果 created_at 是 完整 的 日期 时间 , 您 可能 需要 11 月 1 日 的 独占 上限 , 而 不是 10 月 31 日 的 独占 上限 。 如果 不是 这样 , 则 仅 限 日期 值 的 正常 命名 约定 是 使用 " created _ on " 之类 的 名称 , 而 不是 " created _ at " , 使用 独占 上限 仍然 是 一 件 好事 。
  • 如果 您 的 GROUP BYticket_id , 则 不能 选择 user_id 。 在 这种 情况 下 , user_id 可能 对 两者 都 是 正确 的 。
  • 不能 同时 使用 countavg()

把 所有 这些 放在 一起 , 你 最终 会 得到 这个 :

SELECT AVG(MessageCount)
FROM (
    SELECT user_id,
        count(distinct c.comment_id) as MessageCount
    FROM "comments" c
    LEFT JOIN tickets t on c.ticket_id = t.ticket_id
    LEFT JOIN "users" u on u.user_id  = t.requester
    WHERE t.created_at >= '20221001' AND t.created_at < '20221101'
    GROUP BY u.user_id
) t

格式
注 我 必须 猜测 comments 表 的 主键 。
最 后 , 我 觉得 奇怪 的 是 , 需要 一 张 票 来 暗示 与 评论 相 关联 的 用户 。

相关问题