【发布时间】:2015-11-25 07:46:42
【问题描述】:
我有一张像这样的表
id, user_id , type, date
3, ivnWvOQqoN, iOS , 2015-11-24 15:46:09
4, dskIbJhuSd, iOS , 2015-11-23 19:39:31
5, dskIbJhuSd, iOS , 2015-11-24 23:37:45
6, ----------, iOS , 2015-11-22 23:38:05
7, ----------, iOS , 2015-11-23 23:38:10
现在我正在做这样的查询
SELECT COUNT(*) AS entries, user_id, DATE(created_at) as date, device_type
FROM App_Usage
WHERE device_type = 'iOS'
AND created_at between 2015-11-22 AND 2015-11-25
GROUP BY DATE(created_at), user_id
这个返回结果我期望它看起来像这样
((1L, '----------', datetime.date(2015, 11, 22), 'ios'),
(1L, 'dskIbJhuSd', datetime.date(2015, 11, 23), 'ios'),
(1L, '----------', datetime.date(2015, 11, 23), 'ios'),
(1L, 'dskIbJhuSd', datetime.date(2015, 11, 24), 'ios'),
(1L, 'ivnWvOQqoN', datetime.date(2015, 11, 24), 'ios')
上面代码的最后两行,成为下一个代码的最后一行。上面代码的第二行变成了下面代码的第二行。
我的问题是我可以按日期分组,如果用户不是'----------',那么它会返回这样的结果
((1L, '----------', datetime.date(2015, 11, 22), 'ios'),
(1L, 'combo of users' datetime.date(2015, 11, 23), 'ios'),
(1L, '----------', datetime.date(2015, 11, 23), 'ios'),
(2L, 'combo of users', datetime.date(2015, 11, 24), 'ios'),
我在第一个结果中留下了 user_id,以表明只要用户是 '---------',我希望将它们分组,将其他分组。
所以我想按日期分组,然后按用户不是'----------' 的位置分组,我怎么能这样做,甚至可能吗?
期望的输出
输出:
number of uses, user_id**, type, date;
(1, '----------', 'ios', '2015-11-22 23:38:05'),
(1, 'some users or combo', 'ios', '2015-11-22 13:33:33'),
(2, 'some users or combo', 'ios', '2015-11-23 13:35:37'),
(1, '----------', 'ios', '2015-11-24 00:09:44'),
(2, 'some users or combo', 'ios', '2015-11-24 00:09:44'),
**所以我希望任何“----------”的用户都是 与 '--------' 分组,但任何不是 '--------' 的用户都是 goruped 与所有其他用户。正如你在 24 日看到的, 两种不同的用途合二为一,用途是'--------' 是serperate(这是上面的最后两行)
【问题讨论】:
-
你能提供一个sqlfiddle和正确的结果
-
@Strawberry 一定给我一分钟
-
一般 GROUP BY 规则说:如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须标识一个分组列或者是一个集合函数的参数。
-
@Strawberry 在小提琴上工作,我对结果进行了编辑以使其更清晰,我希望将“---------”用户分组,然后将所有其他用户分组用户分组,如果你明白我的意思
-
@jarlh 在这种情况下没关系