Postgresql 8.4.22 Tài liệu | ||||
---|---|---|---|---|
prev | Backward nhanh | Chương 7. tỷ lệ kèo bóng đá tối nay | Chuyển tiếp nhanh | Tiếp theo |
tỷ lệ kèo bóng đá tối nayCung cấp cách viết tỷ lệ kèo bóng đá tối nay công cụ con để sử dụng trong một lớn hơnChọntỷ lệ kèo bóng đá tối nay. Các nhóm phụ, thường được gọi là phổ biến Biểu thức bảng hoặcCTE10115_10300
tỷ lệ kèo bóng đá tối nay khu vực_sales AS ( Chọn vùng, tổng (số lượng) là Total_sales Từ đơn đặt hàng Theo từng khu vực ), top_regions là ( Chọn vùng Từ khu vực_sales Trong đó Total_Sales (chọn Sum (Total_Sales)/10 từ khu vực_sales) ) Chọn Vùng, sản phẩm, Tổng (số lượng) là sản phẩm_units, Tổng (số lượng) dưới dạng sản phẩm_sales Từ đơn đặt hàng Nơi vùng trong (chọn Vùng từ Top_Regions) Theo từng khu vực, sản phẩm;
Hiển thị tổng doanh số của mỗi sản phẩm chỉ trong doanh số bán hàng hàng đầu khu vực. Ví dụ này có thể đã được viết mà không cótỷ lệ kèo bóng đá tối nay, nhưng chúng tôi đã cần hai cấp độ lồng nhau phụ. Theo cách này dễ dàng hơn một chút.
Tùy chọnđệ quyCông cụ sửa đổi Thay đổitỷ lệ kèo bóng đá tối nayTừ một cú pháp đơn thuần thuận tiện vào một tính năng hoàn thành mọi thứ không Có thể trong SQL tiêu chuẩn. Sử dụngđệ quy, Atỷ lệ kèo bóng đá tối naytỷ lệ kèo bóng đá tối nay có thể tham khảo đầu ra của chính nó. Một ví dụ rất đơn giản là tỷ lệ kèo bóng đá tối nay này để tổng hợp các số nguyên từ 1 đến 100:
tỷ lệ kèo bóng đá tối nay đệ quy t (n) là ( Giá trị (1) Liên minh tất cả Chọn n+1 từ t trong đó n <100 ) Chọn Sum (n) từ t;
Hình thức chung của một đệ quytỷ lệ kèo bóng đá tối naytỷ lệ kèo bóng đá tối nay luôn làThuật ngữ không nhận được,, sau đóUnion(hoặcLiên minh TẤT CẢ), sau đó AThuật ngữ đệ quy, ở đâu Chỉ có thuật ngữ đệ quy mới có thể chứa một tham chiếu đến tỷ lệ kèo bóng đá tối nay đầu ra riêng. Một tỷ lệ kèo bóng đá tối nay như vậy được thực thi như sau:
Đánh giá tỷ lệ kèo bóng đá tối nay đệ quy
Đánh giá thuật ngữ không nhận được. VìUnion(nhưng khôngLiên minh TẤT CẢ), loại bỏ các hàng trùng lặp. Bao gồm tất cả các phần còn lại hàng trong kết quả của tỷ lệ kèo bóng đá tối nay đệ quy, và cũng là nơi họ tạm thờiLàm việc bàn.
Miễn là bảng làm việc không trống, hãy lặp lại những thứ này tỷ lệ kèo bóng đá tối nay bước:
Đánh giá thuật ngữ đệ quy, thay thế Nội dung hiện tại của bảng làm việc cho đệ quy tự tham khảo. VìUnion(Nhưng khôngLiên minh tất cả), loại bỏ sao chép các hàng và hàng trùng lặp bất kỳ trước đó Hàng kết quả. Bao gồm tất cả các hàng còn lại trong kết quả của tỷ lệ kèo bóng đá tối nay đệ quy, và cũng đặt chúng vào tạm thờiBảng trung gian.
Thay thế nội dung của bảng làm việc bằng nội dung của bảng trung gian, sau đó làm trống Bảng trung gian.
Lưu ý:Nói đúng ra, quá trình này được lặp lại không đệ quy, màđệ quylà Thuật ngữ được lựa chọn bởi Ủy ban Tiêu chuẩn SQL.
13744_13948WHEREmệnh đề, và vì vậy tỷ lệ kèo bóng đá tối nay chấm dứt.
tỷ lệ kèo bóng đá tối nay đệ quy thường được sử dụng để đối phó với phân cấp hoặc dữ liệu có cấu trúc cây. Một ví dụ hữu ích là tỷ lệ kèo bóng đá tối nay này để tìm tất cả các phần phụ trực tiếp và gián tiếp của một sản phẩm, chỉ được đưa ra bảng hiển thị các vùi ngay lập tức:
tỷ lệ kèo bóng đá tối nay đệ quy bao gồm_parts (sub_part, part, số lượng) là ( Chọn Sub_Part, Phần, Số lượng từ các phần trong đó Phần = 'Our_Product' Liên minh tất cả Chọn P.Sub_Part, P.Part, P.Quantity Từ bao gồm_parts pr, các phần p Trong đó p.part = pr.sub_part ) Chọn sub_part, sum (số lượng) là tổng số_quantity Từ bao gồm_parts Nhóm bởi sub_part
Khi làm việc với các tỷ lệ kèo bóng đá tối nay đệ quy, điều quan trọng là phải chắc chắn rằng phần đệ quy của tỷ lệ kèo bóng đá tối nay cuối cùng sẽ không trả lại Tuples, nếu không các tỷ lệ kèo bóng đá tối nay sẽ lặp lại vô thời hạn. Thỉnh thoảng, sử dụngUnionthay vìLiên minh tất cả14936_15383đồ thịSử dụng Alinktrường:
tỷ lệ kèo bóng đá tối nay search_graph đệ quy (id, liên kết, dữ liệu, độ sâu) là ( Chọn G.ID, G.Link, G.Data, 1 Từ đồ thị g Liên minh tất cả Chọn G.ID, G.Link, G.Data, SG.Depth + 1 Từ đồ thị G, search_graph SG WHERE G.ID = SG.Link ) Chọn * từ search_graph;
tỷ lệ kèo bóng đá tối nay này sẽ lặp lại nếulinkMối quan hệ chứa chu kỳ. Bởi vì chúng tôi yêu cầu"Độ sâu"đầu ra, chỉ thay đổiLiên minh tất cảđếnUnionSẽ không loại bỏ vòng lặp. Thay vào đó chúng ta cần nhận ra liệu Chúng tôi đã đạt được cùng một hàng một lần nữa trong khi theo dõi một Đường dẫn của tỷ lệ kèo bóng đá tối nay liên kết. Chúng tôi thêm hai cộtđường dẫnvàChu kỳđến tỷ lệ kèo bóng đá tối nay dễ bị vòng lặp:
tỷ lệ kèo bóng đá tối nay search_graph (id, liên kết, dữ liệu, độ sâu, đường dẫn, chu kỳ) là ( Chọn G.ID, G.Link, G.Data, 1, Mảng [g.id], SAI Từ đồ thị g Liên minh tất cả Chọn G.ID, G.Link, G.Data, SG.DEPTH + 1, đường dẫn || g.id, g.id = any (đường dẫn) Từ đồ thị G, search_graph SG Trong đó g.id = sg.link và không chu kỳ ) Chọn * từ search_graph;
16764_16867"Path"Được thực hiện để đạt được bất kỳ hàng cụ thể nào.
Trong trường hợp chung trong đó cần có nhiều hơn một trường Đã kiểm tra để nhận ra một chu kỳ, sử dụng một mảng hàng. Ví dụ, Nếu chúng ta cần so sánh tỷ lệ kèo bóng đá tối nay trườngF1vàF2:
17210_17644
Tip:Bỏ quahàng ()Cú pháp Trong trường hợp phổ biến chỉ cần kiểm tra một trường để nhận ra một chu kỳ. Điều này cho phép một mảng đơn giản hơn là một mảng loại tổng hợp sẽ được sử dụng, đạt được hiệu quả.
Tip:Thuật toán đánh giá tỷ lệ kèo bóng đá tối nay đệ quy Sản xuất đầu ra của nó theo thứ tự tìm kiếm đầu tiên trên chiều rộng. Bạn có thể Hiển thị các kết quả theo thứ tự tìm kiếm sâu sắc đầu tiên bằng cách thực hiện tỷ lệ kèo bóng đá tối nay bên ngoàiĐặt hàng bởiA"Path"Cột được xây dựng theo cách này.
Một thủ thuật hữu ích để kiểm tra các tỷ lệ kèo bóng đá tối nay khi bạn không chắc chắn Nếu họ có thể lặp là đặt một18517_18524Trong tỷ lệ kèo bóng đá tối nay cha mẹ. Ví dụ, tỷ lệ kèo bóng đá tối nay này sẽ lặp lại mãi mãi không cóGiới hạn:
tỷ lệ kèo bóng đá tối nay đệ quy t (n) là ( Chọn 1 Liên minh tất cả Chọn N+1 từ T ) Chọn n từ T giới hạn 100;
Điều này hoạt động vìPostgreSQL'' 'S việc thực hiện chỉ đánh giá như nhiều hàng của atỷ lệ kèo bóng đá tối nay18936_19221
Một thuộc tính hữu ích củatỷ lệ kèo bóng đá tối naytỷ lệ kèo bóng đá tối nay là rằng chúng chỉ được đánh giá một lần mỗi lần thực hiện cha mẹ tỷ lệ kèo bóng đá tối nay, ngay cả khi chúng được phụ huynh giới thiệu nhiều lần tỷ lệ kèo bóng đá tối nay hoặc anh chị emtỷ lệ kèo bóng đá tối naytỷ lệ kèo bóng đá tối nay. Như vậy, các tính toán đắt giá cần thiết ở nhiều nơi có thể được đặt trong mộttỷ lệ kèo bóng đá tối naytỷ lệ kèo bóng đá tối nay để tránh công việc dư thừa. Một ứng dụng có thể khác là ngăn chặn Nhiều đánh giá không mong muốn về các chức năng với tác dụng phụ. Tuy nhiên, mặt khác của đồng tiền này là trình tối ưu hóa là ít có khả năng đẩy các hạn chế từ tỷ lệ kèo bóng đá tối nay cha xuống vàotỷ lệ kèo bóng đá tối naytỷ lệ kèo bóng đá tối nay hơn một tỷ lệ kèo bóng đá tối nay phụ thông thường. Thetỷ lệ kèo bóng đá tối naytỷ lệ kèo bóng đá tối nay nói chung sẽ là được đánh giá như đã nêu, mà không cần triệt tiêu các hàng mà cha mẹ tỷ lệ kèo bóng đá tối nay có thể loại bỏ sau đó. (Nhưng, như đã đề cập ở trên, Đánh giá có thể dừng sớm nếu (các) tài liệu tham khảo cho tỷ lệ kèo bóng đá tối nay Chỉ cần một số lượng hạn chế của hàng.)