【问题标题】:How select from another table without duplicates?如何从另一个没有重复的表中选择?
【发布时间】:2018-09-02 18:17:14
【问题描述】:

我有这样的疑问:

SELECT activity.login_time, sum(activity.sessions) FROM activity 
inner JOIN payments ON payments.user_id = activity.user_id
WHERE activity.login_time BETWEEN '2018-04-05' and '2018-04-18' 
GROUP BY activity.login_time;

我有两个表(列:活动(user_id,会话,登录时间)和支付(列:user_id)。第二个有重复的值。 需要从“payments”中为 user_id 选择 session 而不能重复。

我的变体不会避免重复。我应该在我的查询中修正什么?

谢谢!

activity
user_id login_time  sessions
101 2018-04-11  4
102 2018-04-02  1
103 2018-04-15  3
104 2018-04-06  2
104 2018-04-05  6
105 2018-04-16  1
105 2018-04-04  6
105 2018-04-01  14
106 2018-04-19  5
106 2018-04-17  3
106 2018-04-16  3
106 2018-04-15  4
106 2018-04-13  2

付款

user_id
101
103
104
106

输出

login_time  sessions
2018-04-05  ?
2018-04-06  ?
2018-04-07  ?
2018-04-08  ?
2018-04-09  ?
2018-04-10  ?
2018-04-11  ?
2018-04-12  ?
2018-04-13  ?
2018-04-14  ?
2018-04-15  ?
2018-04-16  ?
2018-04-17  ?
2018-04-18  ?

【问题讨论】:

  • 提供实际输出和期望输出的示例。
  • 尤其是如何区分重复值。
  • @NiVeR,更新

标签: mysql sql database join select


【解决方案1】:

从你的描述看来,你想要用户聚合

    SELECT 
        a.user_id,
        SUM(a.sessions) as user_session
    FROM 
        activity a
    INNER JOIN 
        payments p ON p.user_id = a.user_id
    WHERE 
        a.login_time BETWEEN '2018-04-05' AND '2018-04-18' 
    GROUP BY 
        a.user_id;

但是如果你想要每个用户的总和的登录日期,那么使用子查询

SELECT
    a1.login_time, t1.user_session  
FROM
    activity a1 
INNER JOIN
    (SELECT 
         a.user_id,
         AVG(a.sessions) AS user_session
     FROM 
         activity a
     INNER JOIN 
         payments p ON p.user_id = a.user_id
     WHERE 
         a.login_time BETWEEN '2018-04-05' AND '2018-04-18' 
     GROUP BY 
         a.user_id) AS t1 ON a1.user_id = t1.user_id

【讨论】:

  • 你好!但我需要两列:日期和平均值
  • @ЕлисейГорьков 您需要哪个日期作为用户 105 多次登录 2018-04-16,2018-04-01,2018-04-04
  • 据我所知,在表“活动”中,每个用户每天只有一次。
  • @ЕлисейГорьков 你能显示你的用户 ID 105 的输出然后我可以更改我的查询,因为你在问题中所说的内容已经包含在我的回答中
  • @ЕлисейГорьков 2018-04-05 ?会话列值在哪里
猜你喜欢
  • 2014-01-18
  • 2017-07-17
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多