2012-06-05 51 views
1

我寫過的這個查詢,列出銷售競賽中的前25名,顯示錯誤的結果。GROUP BY lname ORDER BY顯示錯誤結果

用戶沒有表現出應該在名單上相當遠。任何想法可能是什麼問題?

SELECT u.fname, u.lname, SUM(p.point) as points 
    FROM comp_sale s, comp_product p, comp_user u 
WHERE s.prod_id = p.product_id 
    AND s.sale_id = u.wp_id 
GROUP BY lname 
ORDER BY points DESC limit 25 

表comp_user:

user_id int(11) NO PRI NULL auto_increment 
fname varchar(255) NO  NULL  
lname varchar(255) NO  NULL  
storename varchar(255) NO  NULL  
city varchar(255) NO  NULL  
phone varchar(255) NO  NULL  
wp_id int(11) NO  NULL  
type varchar(255) NO  NULL  

表comp_sale

prod_id int(11) NO  NULL  
sale_id int(11) NO  NULL  
serial varchar(255) NO  NULL  

表comp_product

product_id int(11) NO PRI NULL auto_increment 
description varchar(255) NO  NULL  
type varchar(255) NO  NULL  
cylinda_num int(11) NO  NULL  
eel_num int(11) NO  NULL  
point int(11) NO  NULL  
+0

你爲什麼按lName分組?我相信這就是你的結果不正確的原因 – Rahul

+0

不是查詢應該像'GROUP BY u.lname ORDER BY p.points' – Darshana

回答

8

嘗試使用得當,ANSI標準GROUP BY

SELECT 
    u.fname, u.lname, SUM(p.point) as points 
FROM 
    comp_sale s 
    JOIN 
    comp_product p ON s.prod_id = p.product_id 
    JOIN 
    comp_user u ON s.sale_id = u.wp_id 
GROUP BY 
    u.fname, u.lname 
ORDER BY 
    points DESC 
LIMIT 25 

此外,使用明確連接爲清楚起見

+0

耶完全正確! – papacostas

0

回答我的問題: 我沒有被fnamelname但只有lname分組。

SELECT fname, lname, SUM(point) as points FROM cylinda_sale s, cylinda_product p, cylinda_user u WHERE s.prod_id = p.product_id AND s.sale_id = u.wp_id GROUP BY lname, fname ORDER BY points DESC limit 25;