我在语法上有困难。。。
我的问题是:
SELECT t.diapason,
Count(*) AS 'number_of_users'
FROM (SELECT CASE
WHEN amount < 200 THEN '0-200'
WHEN amount >= 200 THEN '200 +'
end AS diapason
FROM (SELECT Sum(amount) AS amount
FROM payments) p) t
GROUP BY t.diapason
ORDER BY number_of_users DESC;
但现在我只需要选择在“2018-01-01”和“2018-01-12”之间有activity.login\u时间的用户。
所以,我想我应该使用内部连接并设置时间段。但是怎么做?
我的table:
activity
user_id login_time
1 01.01.2018
2 01.01.2018
3 03.01.2018
4 30.02.2018
payments
user_id amount payment_time
1 50 10.12.2017
1 200 09.12.2017
2 40 08.08.2017
我应该在查询中更改什么以添加activity.login\u时间?
2018年1月1日至2018年1月12日期间的产量
diapason number_of_users
0-200 2
200+ 1
2条答案
按热度按时间uqjltbpv1#
你加上
WHERE
要筛选的子句。5cnsuln72#
我理解你的问题是这样的。在2018年1月1日至2018年1月12日期间,您有3个用户(user_id=1,2,3)登录。在这些用户中,用户id 1支付了2笔共250,用户id 2支付了1笔共40,用户id 3支付了0,因此他们的总金额为0。因此,范围内有2个值
0-200
,1在范围内200 +
. 如果这是正确的理解,此查询将为您提供所需的结果:输出:
sqlfiddle演示
更新
在总计中添加另一行
number_of_users
,只需添加WITH ROLLUP
到GROUP BY
条款:输出:
在应用程序框架中,可以使用
diapason
价值是NULL
输出类似Total
相反。更新的sqlfiddle
在mysql中也可以做同样的事情(参见这个sqlfiddle),方法是将这个查询 Package 成子查询并使用
COALESCE
上diapason
列。在这种情况下,输出为: