简体   繁体   English

在单个 sql 查询中分组和计数

[英]Group By and Count in a single sql query

I have two tables - users and login_reports.我有两个表 - 用户和 login_reports。

users table have 4 columns - id, email, name, password, created_at, updated_at login_reports table have 3 columns - id, user_id, created_at. users 表有 4 列 - id、email、name、password、created_at、updated_at login_reports 表有 3 列 - id、user_id、created_at。

Every time user logins, an entry is created in login_reports.每次用户登录时,都会在 login_reports 中创建一个条目。

Now I have to write a query to show login reports on admin dashoard.现在我必须编写一个查询来在管理仪表板上显示登录报告。 The query should return rows of users having login count and last login.查询应返回具有登录计数和上次登录的用户行。 Can someone help me with this.有人可以帮我弄这个吗。

SELECT users.id AS id, count(users.id) FROM users
INNER JOIN login_reports
ON users.id = login_reports.user_id
GROUP BY users.id

How do I get last login timestamp ie the last entry of that user in login_reports (created_at).如何获取上次登录时间戳,即该用户在 login_reports (created_at) 中的最后一个条目。

I think you want something like this我想你想要这样的东西

select u.id, count(r.id), max(r.created_at) 
from user u 
left join login_reports r on r.user_id = u.id
group by u.id

edit: thanks @tcadidot0编辑:谢谢@tcadidot0

I used following query to solve this我使用以下查询来解决这个问题

SELECT users.id as id, count(login_reports.id) as login_count, login_reports.created_at as last_login FROM users LEFT JOIN (SELECT * FROM login_reports ORDER BY created_at DESC) login_reports ON users.id = login_reports.user_id

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM