我正在使用以下查询返回一些统计信息,我遇到了一些问题。查询工作正常,但有时提供不正确。在出现错误的情况下,它会将商品显示为与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
感谢您的时间
强尼
答案 0 :(得分:1)
在您使用联接的任何时候尝试COUNT(DISTINCT column_name)
。
有关DISTINCT的更多信息,请访问here。
答案 1 :(得分:1)
您是否正在尝试计算不同的ID?这取决于您的数据和所需的结果。如果您尝试计算的ID是不同的,那么您可以将其添加到计数语句中 - 例如COUNT(DISTINCT o.id)
。
但是,如果要计算每个表中的总记录数并且这些ID不是不同的,则需要为每个计数使用子查询。