我写的这个查询,列出了销售竞赛中的前25名,显示错误的结果。
用户没有表明应该在列表上相当远。知道问题是什么吗?
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
table 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
table comp_sale
prod_id int(11) NO NULL
sale_id int(11) NO NULL
serial varchar(255) NO NULL
table 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 :(得分:9)
尝试使用正确的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
另外,为了清晰起见,使用显式JOIN
答案 1 :(得分:0)
回答我自己的问题:
我没有按fname
和lname
分组,只有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;