Tôi có một bảng chứa một số khóa vào các bảng khác (trong đó mỗi khóa bao gồm nhiều cột). Tôi muốn có thể nhóm các hàng lại với nhau có khóa bằng nhau, nhưng tôi không muốn nhóm tất cả chúng lại với nhau. Nó không đơn giản GROUP BY
trên khóa mà là tôi muốn có thể tạo các nhóm nói 10. Vì vậy, nếu một khóa cụ thể xuất hiện 50 lần tôi sẽ nhận được 5 kết quả khi tôi thực hiện nhóm này (5 nhóm 10). Tôi cũng muốn nhóm này xảy ra ngẫu nhiên trong khóa.
Tôi không biết cách trực tiếp để làm điều này và phương pháp đường vòng mà tôi nghĩ ra không hiệu quả như tôi nghĩ nó nên làm. Giải pháp bùng binh mà tôi đã đưa ra là tạo một cột mới cho mỗi khóa sẽ là một số nguyên sao cho giá trị đó i
biểu thị ith
sự xuất hiện của khóa đó (nhưng theo thứ tự ngẫu nhiên). Sau đó tôi có thể thực hiện phép chia số nguyên sao cho mọi n (nói 10) hàng trong khóa có cùng giá trị và tôi có thể thực hiện một GROUP BY
giá trị đó.
Có cách nào trực tiếp hơn để thực hiện những gì tôi vừa mô tả? Điều này khá khó xử và tôi gặp vấn đề trong việc tạo cột chỉ mục mới (như tôi đã mô tả trong câu hỏi này ).
EDIT: Trước hết lưu ý rằng đây là dành cho MySQL. Tôi sẽ thêm một ví dụ trong trường hợp mục tiêu của tôi không rõ ràng. Các tài liệu MySQL hiển thị một phương thức để đạt được gần đó :
CREATE TABLE animals (
grp ENUM('fish','mammal','bird') NOT NULL,
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (grp,id)
) ENGINE=MyISAM;
INSERT INTO animals (grp,name) VALUES
('mammal','dog'),('mammal','cat'),
('bird','penguin'),('fish','lax'),('mammal','whale'),
('bird','ostrich');
SELECT * FROM animals ORDER BY grp,id;
Điều này tạo ra một bảng, mặc dù không phải là những gì tôi muốn, được đóng lại:
+--------+----+---------+
| grp | id | name |
+--------+----+---------+
| fish | 1 | lax |
| mammal | 1 | dog |
| mammal | 2 | cat |
| mammal | 3 | whale |
| bird | 1 | penguin |
| bird | 2 | ostrich |
+--------+----+---------+
Về cơ bản tôi muốn GROUP BY
id, ngoại trừ tôi muốn các bản ghi mammal
có một "nhóm" cho ID 1-10, một "nhóm" khác cho ID 11-20, v.v. Tuy nhiên, tôi sẽ làm điều này với một bảng hiện có, và tôi không nhất thiết muốn "con chó" xuất hiện với ID 1. Tôi muốn thứ tự ban đầu là ngẫu nhiên, nhưng sau đó sẽ mang tính quyết định.
numMammal
. Tôi không thực sự quan tâm id dog
nhận được gì , nhưng tôi không muốn nó phụ thuộc vào thứ tự chèn ban đầu.
GROUP BY
. Sau đó tôi có thể muốn ghép các nhóm 10 để tìm mối tương quan giữa mức trung bình. Tôi cần thứ tự ngẫu nhiên này bởi vì nếu thứ tự chèn ban đầu tình cờ được sắp xếp theo trọng lượng thì điều này sẽ cho tôi kết quả sai. Tôi hy vọng tôi có ý nghĩa.
I would want that initial ordering to be random, but then deterministic from then out.
<- nói gì? Tôi nghĩ bất kể bạn làm gì, bạn sẽ phải đặt các bản ghi vào một bảng thứ hai. Làm thế nào chính xác logic kinh doanh này hoạt động? Như không có gì để yêu cầu (ví dụ) con chó đến trước. Và ý của bạn là gìI would want the records from *mammal* to have one "group" for IDs 1-10, and another for IDs 11-20
... bạn có thể minh họa điều đó bằng một bảng khác, tập trung vào động vật có vú, trong phần mô tả câu hỏi trên không?