GROUP BY lname ORDER BY, показывая неправильные результаты
Этот запрос, который я написал, перечисляя 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
Ответы
Ответ 1
Попробуйте использовать правильную стандартную 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 для ясности
Ответ 2
Отвечайте на мой вопрос:
Я не группировался 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;