Đây là một chút khó khăn. Bạn có thể muốn sử dụng các biến, chẳng hạn như trong ví dụ sau:
SELECT (
CASE cust_type
WHEN @curType
THEN @curRow := @curRow + 1
ELSE @curRow := 1 AND @curType := cust_type END
) + 1 AS rank,
cust_type,
cust_name,
revenue
FROM sales,
(SELECT @curRow := 0, @curType := '') r
ORDER BY cust_type DESC, revenue DESC;
Phần (SELECT @curRow := 0, @curType := '') r
cho phép khởi tạo biến mà không đòi hỏi một lệnh riêng SET
.
trường hợp thử nghiệm:
CREATE TABLE sales (cust_type varchar(10), cust_name varchar(10), revenue int);
INSERT INTO sales VALUES ('Top', 'A', 10000);
INSERT INTO sales VALUES ('Top', 'B', 9000);
INSERT INTO sales VALUES ('Top', 'C', 8000);
INSERT INTO sales VALUES ('Bottom', 'X', 5000);
INSERT INTO sales VALUES ('Bottom', 'Y', 6000);
INSERT INTO sales VALUES ('Bottom', 'Z', 7000);
Kết quả:
+------+-----------+-----------+---------+
| rank | cust_type | cust_name | revenue |
+------+-----------+-----------+---------+
| 1 | Top | A | 10000 |
| 2 | Top | B | 9000 |
| 3 | Top | C | 8000 |
| 1 | Bottom | Z | 7000 |
| 2 | Bottom | Y | 6000 |
| 3 | Bottom | X | 5000 |
+------+-----------+-----------+---------+
6 rows in set (0.00 sec)
Một trường hợp thử nghiệm:
CREATE TABLE sales (cust_type varchar(10), cust_name varchar(10), revenue int);
INSERT INTO sales VALUES ('Type X', 'A', 7000);
INSERT INTO sales VALUES ('Type X', 'B', 8000);
INSERT INTO sales VALUES ('Type Y', 'C', 5000);
INSERT INTO sales VALUES ('Type Y', 'D', 6000);
INSERT INTO sales VALUES ('Type Y', 'E', 4000);
INSERT INTO sales VALUES ('Type Z', 'F', 4000);
INSERT INTO sales VALUES ('Type Z', 'G', 3000);
Kết quả:
+------+-----------+-----------+---------+
| rank | cust_type | cust_name | revenue |
+------+-----------+-----------+---------+
| 1 | Type Z | F | 4000 |
| 2 | Type Z | G | 3000 |
| 1 | Type Y | D | 6000 |
| 2 | Type Y | C | 5000 |
| 3 | Type Y | E | 4000 |
| 1 | Type X | B | 8000 |
| 2 | Type X | A | 7000 |
+------+-----------+-----------+---------+
7 rows in set (0.00 sec)
Bạn rõ ràng có thể đặt hàng cust_type
theo thứ tự tăng dần thay vì giảm dần. Tôi đã sử dụng giảm dần chỉ để có Top
trước Bottom
trong trường hợp thử nghiệm ban đầu.
Bạn đang hỏi cách tạo bảng này? Làm cách nào để truy vấn bảng này? Cách truy vấn một bảng khác để nhận kết quả như thế này? – grossvogel
Vui lòng sử dụng tính năng nhận xét theo câu trả lời bạn nhận được để làm rõ. Nếu một cái gì đó không phù hợp trong một bình luận, nó sẽ được chỉnh sửa vào câu hỏi của bạn (xem liên kết chỉnh sửa) –