Yêu cầu thg 10 4, 2022 10:54 SA 190 0 1
  • 190 0 1
-1

Mình có table orders, có company_id, user_id, created_at, hãy lấy ra người đã order nhiều món hàng nhất trong 5 ngày gần đây của mỗi công ty?

Chia sẻ
  • 190 0 1

Mình có table orders, có company_id, user_id, created_at, hãy lấy ra người đã order nhiều món hàng nhất trong 5 ngày gần đây của mỗi công ty? Cảm ơn ạ !

1 CÂU TRẢ LỜI


Đã trả lời thg 10 4, 2022 5:02 CH
Đã được chấp nhận
+1

Bạn có thể sử dụng câu query như sau: SELECT COUNT(), user_id FROM orders group by user_id WHERE thời gian hiện tại ( now() ) - created_at < 5 ngày AND company_id = ? ORDER BY COUNT() DESC

câu query này sẽ trả ra số đơn hàng user này có, user_id theo câu điều kiện như bạn muốn, bạn sắp xếp giảm dần và lấy record đầu tiên thì sẽ được như yêu cầu nhé

Chia sẻ
Avatar MR LUFFY @kuanglee97
thg 10 5, 2022 2:06 SA

Ví dụ ở đây có 5 công ty, và mỗi cty có nhiều nhân viên order , thì yêu cầu ở đây cần lấy ra users có số lượng order nhiều nhất của mỗi cty, thì cần lấy ra 5 user có số lượng order nhiều nhất của mỗi cty.

Avatar nonono @lehuyvuong
thg 10 5, 2022 2:52 SA
thg 10 5, 2022 2:53 SA

with t_1 as( select user_id, count(user_id) as order_count, company_id from order_group where DATEDIFF(day, GETDATE(), order_group.created_at) < 5 group by user_id, company_id ), t_2 as ( select *, RANK() OVER (PARTITION BY t_1.company_id ORDER BY t_1.order_count) as ranking
from t_1 ) select * from t_2 WHERE ranking <= 5 order by company_id, ranking;

Cái này mình code bằng ms sql. Nếu mà nhiều ngươif cùng số order thì sẽ cùng rank, ví dụ 3 người cùng xếp thứ 4 thì sẽ hiện cả 3 ngưòi đó.

Avatar MR LUFFY @kuanglee97
thg 10 5, 2022 8:47 SA

@alitonia Mình càm ơn ạ

Avatar MR LUFFY @kuanglee97
thg 10 5, 2022 9:56 SA

Mình mới nghĩ ra được câu truy vấn : select * from ( select *, RANK() over (PARTITION BY company_id order by countUser desc) as rank_no from ( select *, count(user_id) as countUser from orders where created_at between SUBDATE(CURDATE(), INTERVAL 5 DAY) AND CURDATE() group by company_id, user_id order by countUser desc ) as datasource ) as test where rank_no = 1 ;

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí