Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

NHÓM SQL BẰNG:các khoảng trong tính liên tục?

Không có chức năng như vậy trong "các hàm tiêu chuẩn của SQL", nhưng có thể đạt được kết quả mong muốn bằng cách sử dụng một số thủ thuật.

Với truy vấn con được minh họa bên dưới, chúng tôi tạo một trường ảo mà bạn có thể sử dụng để GROUP BY trong truy vấn bên ngoài. Giá trị của trường ảo này được tăng lên mỗi lần khi có khoảng trống trong chuỗi oID . Bằng cách này, chúng tôi tạo mã nhận dạng cho từng "đảo dữ liệu" đó:

SELECT  SUM(Area), COUNT(*) AS Count_Rows
FROM    (
        /* @group_enumerator is incremented each time there is a gap in oIDs continuity */
        SELECT  @group_enumerator := @group_enumerator + (@prev_oID != oID - 1) AS group_enumerator,
                @prev_oID := oID AS prev_oID,
                sample_table.*
        FROM    (
                SELECT  @group_enumerator := 0,
                        @prev_oID := -1
                ) vars,
                sample_table
        /* correct order is very important */
        ORDER BY
                oID
        ) q
GROUP BY
        group_enumerator

Bảng kiểm tra và tạo dữ liệu:

CREATE TABLE sample_table (oID INT auto_increment, Area INT, PRIMARY KEY(oID));
INSERT INTO sample_table (oID, Area) VALUES (1,5), (2,2), (3,3), (5,3), (6,4), (7,5);

Tôi cần cảm ơn Quassnoi vì đã chỉ ra thủ thuật này trong câu hỏi liên quan của tôi ;-)

CẬP NHẬT:đã thêm bảng và dữ liệu thử nghiệm và sửa tên cột trùng lặp trong truy vấn mẫu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết quả nhóm PHP / MySQL theo cột

  2. Tên bảng được tham số hóa

  3. hiển thị giá trị enum mysql trong php

  4. Chọn sản phẩm theo nhiều thuộc tính, sử dụng AND thay thế HOẶC bộ nối, Mô hình dữ liệu EAV

  5. Tham gia hai bảng MySQL với PHP