2008-10-10 38 views
9

Tôi có một truy vấn nhiều bảng, tương tự như (phiên bản đơn giản) nàyTrong mysql, bạn có thể chia một bí danh, bởi một bí danh khác không?

SELECT columns, count(table2.rev_id) As rev_count, sum(table2.rev_rating) As sum_rev_rating 
FROM table1 
LEFT JOIN table2 
ON table1.dom_id = table2.rev_domain_from 
WHERE dom_lastreview != 0 AND rev_status = 1 
GROUP BY dom_url 
ORDER BY sum_rev_rating/rev_count DESC 

Vấn đề là trong mệnh đề ORDER BY. Điều này gây ra một lỗi mysql để hiển thị, mà là như sau:

Reference 'sum_ rev_ giá' không được hỗ trợ (tham chiếu đến chức năng nhóm)

Trả lời

14

Bạn tôi không thể làm các phép tính với bí danh. Một cách để làm điều này sẽ đơn giản là tạo ra một bí danh và thứ tự khác.

SELECT columns, count(table2.rev_id) As rev_count, sum(table2.rev_rating) As sum_rev_rating, sum(table2.rev_rating)/count(table2.rev_id) as avg_rev_rating 
FROM table1 
LEFT JOIN table2 
ON table1.dom_id = table2.rev_domain_from 
WHERE dom_lastreview != 0 AND rev_status = 1 
GROUP BY dom_url 
ORDER BY avg_rev_rating DESC 
+0

Tôi đã thử thực hiện sum_rev_rating/rev_count AS avg_rating, nhưng tôi nhận được kết quả tương tự. Tôi đoán bạn không thể làm một bí danh, từ một bí danh. Phương pháp của bạn hoạt động hoàn hảo! –

+0

Bạn không thể sử dụng bí danh trong các biểu thức khác trong danh sách chọn. Bạn chỉ có thể sử dụng bí danh trong các mệnh đề GROUP BY, HAVING và ORDER BY. –

1

mysql của tôi là Rusty; bạn có thể thử

SELECT columns, count(table2.rev_id) As rev_count, 
    sum(table2.rev_rating) As sum_rev_rating, 
    sum(table2.rev_rating)/count(table2.rev_id) as rev_ratio 
FROM table1 
    LEFT JOIN table2ON table1.dom_id = table2.rev_domain_from 
WHERE dom_lastreview != 0 
AND rev_status = 1 
GROUP BY dom_url 
ORDER BY rev_Ratio DESC 

hoặc

SELECT * from (
    SELECT columns, count(table2.rev_id) As rev_count, 
     sum(table2.rev_rating) As sum_rev_rating 
    FROM table1 
     LEFT JOIN table2ON table1.dom_id = table2.rev_domain_from 
    WHERE dom_lastreview != 0 
    AND rev_status = 1 
    GROUP BY dom_url 
) X 
ORDER BY X.sum_rev_rating/X.rev_count DESC 

hoặc

SELECT * from (
    SELECT columns, count(table2.rev_id) As rev_count, 
     sum(table2.rev_rating) As sum_rev_rating, 
     sum(table2.rev_rating)/count(table2.rev_id) as rev_ratio 
    FROM table1 
     LEFT JOIN table2ON table1.dom_id = table2.rev_domain_from 
    WHERE dom_lastreview != 0 
    AND rev_status = 1 
    GROUP BY dom_url 
) X 
ORDER BY rev_Ratio DESC