thắc mắc Thắc mắc về subquery trong SQL

WAI

Đã tốn tiền
Chào các bác, em tự học SQL nên có thắc mắc này rất cơ bản. Em đọc tài liệu thấy SQL có subquery, dạng như query lồng trong query cũng như kiểu Excel hàm lồng trong hàm.

Vậy SQL có thể cho mình nhiều cấp độ query con trong query mẹ như Excel không nhỉ? Ví dụ query chính, đến subquery, trong subquery lại có subquery con hơn nữa?

Và em làm cái truy vấn này trong Postgres sao nó không được

select sum (select tientra from thang7_8714 where tientra > 0)

Cái này là em chỉ luyện tập subquery nên cố tình viết truy vấn như vậy chứ nếu với yêu cầu này thì chưa cần đến subquery cũng ra được kết quả. Nhưng không biết sao Postgres cứ báo lỗi.
 
select sum ((select tientra from thang7_8714 where tientra > 0))
Thử cái này, mà ít nhất khi bảo nó ko được thì cũng phải đưa nguyên câu query đầy đủ với thông báo lỗi ra để còn biết chớ.
 
Chào các bác, em tự học SQL nên có thắc mắc này rất cơ bản. Em đọc tài liệu thấy SQL có subquery, dạng như query lồng trong query cũng như kiểu Excel hàm lồng trong hàm.

Vậy SQL có thể cho mình nhiều cấp độ query con trong query mẹ như Excel không nhỉ? Ví dụ query chính, đến subquery, trong subquery lại có subquery con hơn nữa?

Và em làm cái truy vấn này trong Postgres sao nó không được

select sum (select tientra from thang7_8714 where tientra > 0)

Cái này là em chỉ luyện tập subquery nên cố tình viết truy vấn như vậy chứ nếu với yêu cầu này thì chưa cần đến subquery cũng ra được kết quả. Nhưng không biết sao Postgres cứ báo lỗi.
bạn muốn lấy ra tổng số tiền trà đã trả hay tổng số lần đã trả tiền?
 
Chào các bác, em tự học SQL nên có thắc mắc này rất cơ bản. Em đọc tài liệu thấy SQL có subquery, dạng như query lồng trong query cũng như kiểu Excel hàm lồng trong hàm.

Vậy SQL có thể cho mình nhiều cấp độ query con trong query mẹ như Excel không nhỉ? Ví dụ query chính, đến subquery, trong subquery lại có subquery con hơn nữa?

Và em làm cái truy vấn này trong Postgres sao nó không được

select sum (select tientra from thang7_8714 where tientra > 0)

Cái này là em chỉ luyện tập subquery nên cố tình viết truy vấn như vậy chứ nếu với yêu cầu này thì chưa cần đến subquery cũng ra được kết quả. Nhưng không biết sao Postgres cứ báo lỗi.
1) Về các subquery thì vẫn có thể có subquery con được. Thực tế 1 subquery là 1 view.
2) SELECT SUM(tientra) FROM (select tientra from thang7_8714 where tientra > 0) AS tmp.
 
Hình đây các bác ơi, em chưa hiểu mình sai ở chỗ nào nữa.
s11KHRy.png


Làm như bác nguyenluc900 rồi mà vẫn lỗi.
 
không hiểu lắm sao không dùng
select sum (tientra) from thang7_8714 where tientra > 0

nếu muốn lồng vào query khác thì


select total from (select sum (tientra) total from thang7_8714 where tientra > 0)
 
Hình đây các bác ơi, em chưa hiểu mình sai ở chỗ nào nữa.
s11KHRy.png


Làm như bác nguyenluc900 rồi mà vẫn lỗi.
1. Syntax error - cú pháp của subquery là (subquery), cặp dấu ngoặc là 1 phần của subquery. Nếu muốn pass subquery vào function thì dùng function((subquery)).
2. Aggregation muốn dùng với subquery thì subquery phải để sau FROM chứ ko nhét trực tiếp như là tham số, nếu không sẽ bị lỗi "subquery returns more than 1 row" nếu subquery trả về nhiều hơn 1 dòng.
SQL:
SELECT SUM((subquery)); -- ko lỗi nếu chỉ có 1 dòng
SQL:
SELECT * FROM (SELECT SUM(*) FROM ...) AS `subquery`;
 
Last edited:
Back
Top