聚合MySQL子查询的结果

时间:2013-06-06 16:27:51

标签: mysql sql

如果这个标题没有意义,请提供建议!

我正在制作一个简单的(ish)统计信息查询,我有几列时间已开始,查看项目的时间已结束。我想要做的是返回您可以将某个项目的视图分类为反弹的次数。

目前查询能够返回所有必要的信息,到目前为止还相当简单,但这部分我遇到了一些麻烦。

这是我目前的错误方法。

IF(((UNIX_TIMESTAMP(v.time_ended) - UNIX_TIMESTAMP(v.time_started)) < 5), 1,0) bounce

我需要尝试获取每行的UNIX_TIMESTAMP(v.time_ended)并从UNIX_TIMESTAMP(v.time_started)中扣除它,看看这个值是否小于5,我将其归类为&# 39;弹跳&#39;如果是这样的+1反弹栏。

我只返回1行数据,不知道如何执行此操作,我们将非常感谢任何帮助。

由于

强尼

更新代码

SELECT i.id, 
i.title, 
i.slug, 
i.buyer_id as buyer_id, 
i.date_added as date_added, 
a.slug as area_slug, 
COUNT(o.id) as offers, 
COUNT(v.item_id) as total_item_views, 
(COUNT(v.item_id) / COUNT(o.id)) conversion,

SUM(CASE WHEN v.time_ended - v.time_started < 5 THEN 1 ELSE 0 END) 

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=3

1 个答案:

答案 0 :(得分:1)

我想你想要这样的东西:

SELECT Item
      ,SUM(CASE WHEN v.time_ended - v.time_started < 5 THEN 1 ELSE 0 END))
FROM table
GROUP BY Item

从您更新的代码中,您完全错过了一个群组:

SELECT i.id, i.title, i.slug, i.buyer_id as buyer_id, i.date_added as date_added, a.slug as area_slug, 
    COUNT(o.id) as offers, 
    COUNT(v.item_id) as total_item_views, 
    (COUNT(v.item_id) / COUNT(o.id)) conversion,
    SUM(CASE WHEN v.time_ended - v.time_started < 5 THEN 1 ELSE 0 END) 
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=3
GROUP BY  i.id, i.title, i.slug, i.buyer_id, i.date_added, a.slug
相关问题