在中等复杂的查询中,COUNT有轻微的SQL错误

时间:2013-06-13 03:47:29

标签: mysql sql

我正在使用以下查询返回一些统计信息,我遇到了一些问题。查询工作正常,但有时提供不正确。在出现错误的情况下,它会将商品显示为与item_views相同的数字。我不明白为什么。想知道是否有人可以帮助我。

SELECT i.id, 
i.title, 
i.slug, 
i.seller_id as seller_id, 
i.date_added as date_added, 
a.slug as area_slug, 
COUNT(o.id) as offer, 
COUNT(v.item_id) as total_item_views, 
(COUNT(v.item_id) / COUNT(o.id)) * 100 conversion, 
(UNIX_TIMESTAMP(v.time_ended) - UNIX_TIMESTAMP(v.time_started)) / 60 difference_minutes,
SUM(CASE WHEN v.time_ended - v.time_started < 10 THEN 1 ELSE 0 END) bounce,
COUNT(DISTINCT v.session_id) unique_views

FROM item as i

LEFT JOIN offer as o
ON i.id = o.item_id

LEFT JOIN viewed_item as v
ON i.id = v.item_id

INNER JOIN area as a
ON a.id = i.area_id

WHERE i.id = 1

感谢您的时间

强尼

2 个答案:

答案 0 :(得分:1)

在您使用联接的任何时候尝试COUNT(DISTINCT column_name)

有关DISTINCT的更多信息,请访问here

答案 1 :(得分:1)

您是否正在尝试计算不同的ID?这取决于您的数据和所需的结果。如果您尝试计算的ID是不同的,那么您可以将其添加到计数语句中 - 例如COUNT(DISTINCT o.id)

但是,如果要计算每个表中的总记录数并且这些ID不是不同的,则需要为每个计数使用子查询。