Yêu cầu thg 9 26, 2022 8:30 SA 148 0 1
  • 148 0 1
0

Hỏi về truy vấn dữ liệu trong MySql

Chia sẻ
  • 148 0 1

Với dữ liệu như trong ảnh của mình, 1 staff trong một ngày có làm việc ở cùng một công ty nhưng ở hai bộ phận khác nhau thì mình có thể truy vấn như nào để được staff_id, office_id, (số ngày làm việc) Ví dụ staff có id = 2 thì minhf muốn truy vấn ra kết quả :

staff_id office_id worked_days 2 12 2

Mong được sự trợ giúp của mọi người. Mình xin cám ơn!

1 CÂU TRẢ LỜI


Đã trả lời thg 9 26, 2022 10:29 SA
Đã được chấp nhận
0

Trong example của bạn thì có vẻ giá trị worked_days = 2 có vẻ bạn đang muốn đếm theo department_id nhỉ?

Mình nghĩ bạn thử nhóm các dòng trong bảng lại theo staff_id + office_id + date có lẽ sẽ đếm được số bộ phận đã checkin trong ngày:

SELECT staff_id, office_id, count(*) as worked_days
FROM timesheets
GROUP BY staff_id, office_id, date;
Chia sẻ
Avatar TestDev @testdev
thg 9 26, 2022 1:36 CH

Cám ơn Kim đã trả lời cho câu hỏi của mình. Đúng là mình muốn đếm theo department_id. Giờ mình muốn hỏi thêm là do staff đó làm cùng một công ty nên cho dù làm ở nhiều bộ phận khác nhau vẫn tính là 1 ngày làm, vậy mình nên truy vấn như nào, mình rất mong được sự giúp đỡ thêm😊

thg 9 27, 2022 1:52 SA

@testdev À, tức là dựa vào bảng trên bạn đang muốn đếm số ngày công của nhân viên. Thế thì đơn giản là dùng group by để nhóm lại theo ngày:

SELECT staff_id, office_id, DAY(date) as day
FROM timesheets
WHERE MONTH(date) = 9
GROUP BY staff_id, office_id, DAY(date)

Để tránh trường hợp 1 nhân viên checkin nhiều lần trong cùng một ngày và trong database có nhiều record với giờ phút khác nhau mình có dùng thêm hàm DAY() để extract ngày trong tháng. VD: 2022-09-26 => day = 26.

image.png

Giờ bạn có thể dùng query trên để lấy dữ liệu hiển thị ra website.

Ngoài ra, nếu muốn đếm số ngày làm việc thì bạn có thể dùng thêm sub-query như sau:

SELECT
	staff_id, office_id, count(*) as worked_days
FROM (
	SELECT staff_id, office_id, DAY(date) as day
    FROM timesheets
    WHERE MONTH(date) = 9
    GROUP BY staff_id, office_id, DAY(date)
) as datasource
GROUP BY staff_id, office_id;

image.png

thg 9 27, 2022 1:53 SA

Bạn có thể test thử query: https://www.db-fiddle.com/f/fQoDQBs55sMrhgs5EVGqPh/0

Avatar TestDev @testdev
thg 9 27, 2022 2:30 SA

Mình cám ơn @huukimit đã dành thời gian trả lời câu hỏi của mình. Mình đã giải quyết được vấn đề.

Cám ơn bạn nhiều nha!

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í