Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Câu lệnh truy vấn SQL

  1. #1
    Ngày gia nhập
    02 2017
    Nơi ở
    đà nẵng
    Bài viết
    3

    Mặc định Câu lệnh truy vấn SQL

    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		Untitled.jpg
Lần xem:	2
Size:		79.7 KB
ID:		54022
    PHP Code:
    GO/*Cho biết họ tên trưởng phòng của phòng có đông nhân viên nhất.*/ /*ERORR*/
    SELECT PB.TenPHGPB.MaPHGNV.HoTenCOUNT(NV.MaNV'SLNV'
    FROM dbo.NhanVien NV JOIN dbo.PhongBAn PB
        ON PB
    .MaPHG NV.PGH AND PB.TrPHG NV.MaNV
    GROUP BY PB
    .TenPHGPB.MaPHGNV.HoTen
    HAVING COUNT
    (NV.MaNV) > ALL SELECT COUNT(NV1.MaNV)
                                   
    FROM dbo.NhanVien NV1 JOIN dbo.PhongBAn PB
                                   ON PB
    .TrPHG NV1.MaNV 
    Cho em hỏi tại sao lại sai ạ.

  2. #2
    Ngày gia nhập
    02 2016
    Bài viết
    247

    Trích dẫn Nguyên bản được gửi bởi sher Xem bài viết
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		Untitled.jpg
Lần xem:	2
Size:		79.7 KB
ID:		54022
    PHP Code:
    GO/*Cho biết họ tên trưởng phòng của phòng có đông nhân viên nhất.*/ /*ERORR*/
    SELECT PB.TenPHGPB.MaPHGNV.HoTenCOUNT(NV.MaNV'SLNV'
    FROM dbo.NhanVien NV JOIN dbo.PhongBAn PB
        ON PB
    .MaPHG NV.PGH AND PB.TrPHG NV.MaNV
    GROUP BY PB
    .TenPHGPB.MaPHGNV.HoTen
    HAVING COUNT
    (NV.MaNV) > ALL SELECT COUNT(NV1.MaNV)
                                   
    FROM dbo.NhanVien NV1 JOIN dbo.PhongBAn PB
                                   ON PB
    .TrPHG NV1.MaNV 
    Cho em hỏi tại sao lại sai ạ.
    Muón tìm đông nhất thì phải >= ALL chứ. Một entity đâu thể tự lớn hơn nó, đâu co thể dùng > ALL được

    Code:
    SELECT PB.TenPHG, PB.MaPHG, NV.HoTen 
    FROM dbo.NhanVien NV JOIN
        (SELECT MaPHG, TenPHG, TrPHG
             FROM dbo.PhongBAn
             GROUP BY MaPHG, TenPHG, TrPHG
             HAVING COUNT(*) >= ALL (SELECT COUNT(*)
                                            FROM dbo.NhanVien JOIN dbo.PhongBan ON PHG = MaPHG GROUP BY PHG)
        ) PB
    ON NV.MaNV = PB.TrPHG
    Nếu mỗi nhân viên chắc chắn thuộc về 1 phòng thì khong cần join với phòng, có thể xóa chỗ màu đỏ

    Phần tô đậm có thể viết lại như vầy dễ trông hơn

    Code:
             HAVING COUNT(*) >= (SELECT MAX(MCount) FROM (SELECT COUNT(*) MCount
                                                             FROM dbo.NhanVien JOIN dbo.PhongBan ON PHG = MaPHG GROUP BY PHG))
    

  3. #3
    Ngày gia nhập
    02 2017
    Nơi ở
    đà nẵng
    Bài viết
    3

    Trích dẫn Nguyên bản được gửi bởi NguNhuheo Xem bài viết
    Muón tìm đông nhất thì phải >= ALL chứ. Một entity đâu thể tự lớn hơn nó, đâu co thể dùng > ALL được

    Code:
    SELECT PB.TenPHG, PB.MaPHG, NV.HoTen 
    FROM dbo.NhanVien NV JOIN
        (SELECT MaPHG, TenPHG, TrPHG
             FROM dbo.PhongBAn
             GROUP BY MaPHG, TenPHG, TrPHG
             HAVING COUNT(*) >= ALL (SELECT COUNT(*)
                                            FROM dbo.NhanVien JOIN dbo.PhongBan ON PHG = MaPHG GROUP BY PHG)
        ) PB
    ON NV.MaNV = PB.TrPHG
    Nếu mỗi nhân viên chắc chắn thuộc về 1 phòng thì khong cần join với phòng, có thể xóa chỗ màu đỏ

    Phần tô đậm có thể viết lại như vầy dễ trông hơn

    Code:
             HAVING COUNT(*) >= (SELECT MAX(MCount) FROM (SELECT COUNT(*) MCount
                                                             FROM dbo.NhanVien JOIN dbo.PhongBan ON PHG = MaPHG GROUP BY PHG))
    
    Add có thể giải thích rõ thêm về code của add được k ạ, em vẫn chưa hiểu lắm

  4. #4
    Ngày gia nhập
    02 2016
    Bài viết
    247

    Đêm ua tôi buòn ngủ, viết thiếu 1 chút. Cái SubQuery thú nhì phải viết như thế này:

    Code:
        (SELECT MaPHG, TenPHG, TrPHG
             FROM dbo.PhongBAn JOIN dbo.NhanVien ON PHG = MaPHG
             GROUP BY MaPHG, TenPHG, TrPHG
             HAVING COUNT(*) >= ALL (SELECT COUNT(*)
                                            FROM dbo.NhanVien JOIN dbo.PhongBan ON PHG = MaPHG GROUP BY PHG)
        ) PB
    Phải có phần JOIN màu xanh nó mới đếm đủ

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn