2017-06-28 51 views
5

Vấn đề tìm hiểu subqueryHiểu tóm tắt các truy vấn nội

Tôi không hiểu ví dụ này từ www.sqlitetutorial.net/sqlite-subquery: enter image description here

Chỉ có một số được trả về bởi truy vấn bên trong: 1422138358

enter image description here

Nhưng tỷ lệ trung bình của con số này là khác nhau:

enter image description here

Vậy tại sao mức trung bình 1422138358 không phải là 1422138358? Hai truy vấn không độc lập? Nếu tôi loại bỏ "ORDER BY ALBUMID" kết quả là như nhau:

enter image description here

Ví dụ dữ liệu:
http://www.sqlitetutorial.net/sqlite-sample-database/

Sửa: Ok, có lẽ một số tràn số nguyên xảy ra như các cột là số nguyên, nhưng tôi vẫn không hiểu lý do tại sao ví dụ này lấy trung bình của một số duy nhất? enter image description here

Trả lời

1

Rất có thể đó là một sai lầm

1) Từ văn bản mà bạn có thể thấy rằng họ muốn 'tổng kích thước của một album' và bạn `lại truy vấn bảng Tracks, lẽ ra phải có một cột album_ID

2) Bạn không thể sử dụng ORDER BY nếu bạn `lại chỉ sử dụng cột hợp như

select SUM(bytes) 
from Tracks 
Order by albumID 

vì không có gì để đặt hàng.

Cũng lưu ý rằng bạn không thểsử dụngtrật tự bởi trong truy vấn con

Cuối cùng những gì đã mất tích ở đây, đây còn lại của truy vấn:

Select AVG(album.size) as [avg(album.size)] 
from (
select albumID,SUM(bytes) as size 
from Tracks 
GROUP BY albumID 

) as album 

Bạn có thể tìm hiểu thêm về các truy vấn con here

Và nếu bạn muốn chơi xung quanh với những điều này, heres mã thứ lúc bạn có thể sao chép và sử dụng nó cho exercies thêm trên trang web đó:

CREATE TABLE tracks (AlbumID int,bytes int) 
    CREATE TABLE albums (AlbumID int, title nvarchar(50)) 
    insert into Tracks values (1,2),(2,10),(3,15) 
    Select AVG(album.size) as [avg(album.size)] 
    from (
    select AlbumID,SUM(bytes) as size 
    from tracks 
    GROUP BY albumID 

) as album 

Hy vọng nó giúp

Các vấn đề liên quan