Những gì bạn cần ở đây là một truy vấn SQL hơi phức tạp. Nó sẽ được tạo thành từ các truy vấn con.
Đầu tiên là cái này ( fiddle ). Nó cung cấp cho bạn tổng số mục mở cửa cho mỗi tên.
SELECT COUNT(*) total, name FROM stats GROUP BY name
Tiếp theo là cái này ( fiddle ). Nó cung cấp cho bạn số lần mở cho mỗi cánh cửa và tên.
SELECT COUNT(*) bydoor, name, door FROM stats GROUP BY name, door
Cái thứ ba ( fiddle ) kết hợp với tên thứ hai và cho bạn một dòng cho mỗi tên, hiển thị cửa mở.
SELECT name,
GROUP_CONCAT(CONCAT(bydoor,'X',' door ', door) ORDER BY bydoor DESC) details
FROM ( SELECT COUNT(*) bydoor,
name,
door
FROM stats
GROUP BY name, door
) s
GROUP BY name
Cuối cùng, bạn cần một JOIN để liên kết các truy vấn con đó với nhau, dạng này.
SELECT t.name, t.total, d.details
FROM ( .... the first subquery ....) t
JOIN ( .... the second subquery .... ) d ON t.name = d.name
ORDER BY t.total DESC, t.name
Tất cả được viết ra trông như thế này ( fiddle
). Bạn đặt nó vào sql
của mình biến và bạn đã sẵn sàng. Nó chỉ là một chuỗi nhiều dòng.
set sql {SELECT t.name, t.total, d.details
FROM (SELECT COUNT(*) total, name FROM stats GROUP BY name) t
JOIN ( SELECT name,
GROUP_CONCAT(CONCAT(bydoor,'X',' door ', door) ORDER BY bydoor DESC) details
FROM ( SELECT COUNT(*) bydoor,
name,
door
FROM stats
GROUP BY name, door
) s
GROUP BY name
) d ON t.name = d.name
ORDER BY t.total DESC, t.name}
Vì vậy, có một truy vấn được tạo từ một loạt các truy vấn lồng vào nhau.
Có một số thủ thuật ở đây để bạn học khi bạn trở nên giỏi hơn trong phân tích dữ liệu SQL.
- sử dụng
GROUP BY
- lồng truy vấn, còn được gọi là truy vấn con. Bạn có thể coi các truy vấn con là bảng ảo.
- (nâng cao)
GROUP_CONCAT
.