ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql-‘IN / ALL / ANY’子查询中的未知列

2019-11-22 02:14:39  阅读:251  来源: 互联网

标签:join subquery sql mysql


我有2个表:members和member_logs.

成员可以属于成员表,该组位于成员表中.给定一个日期范围和一个组,我试图找出如何获得成功登录次数最多的10天.到目前为止,我所得到的是大量的子查询恐怖信息.

SELECT count(member_id) AS `num_users`,
DATE_FORMAT(`login_date`,'%Y-%m-%d') AS `reg_date` 
FROM member_logs 
WHERE `login_success` = 1 
and `reg_date` IN 
    (SELECT DISTINCT DATE_FORMAT(`login_date`,'%Y-%m-%d') AS `reg_date` 
     FROM member_logs 
     WHERE `login_success` = 1 
     and (DATE_FORMAT(`login_date`,'%Y-%m-%d') BETWEEN '2012-02-25' and '2014-03-04'))
and `member_id` IN 
    (SELECT `member_id` 
     FROM members 
     WHERE `group_id` = 'XXXXXXX' 
     and `deleted` = 0) 
ORDER BY `num_users` desc 
LIMIT 0, 10

据我了解,正在发生的事情是WHERE子句在子查询生成之前正在评估,并且我也应该使用联接.如果有人可以帮助我或指出正确的方向,那将是令人难以置信的.

编辑:限制是错误的,修复它

解决方法:

完全不需要第一个子查询,因为您可以直接在当前表member_logs中按日期过滤.我也更喜欢第二个子查询的JOIN.然后,您缺少的是按日期(天)分组.

类似于以下查询(未经测试)的查询将完成您想要的工作:

SELECT COUNT(ml.member_id) AS `num_users`, 
  DATE_FORMAT(`login_date`,'%Y-%m-%d') AS `reg_date` 
FROM member_logs ml
INNER JOIN members m ON ml.member_id = m.member_id
WHERE `login_success` = 1 
  AND DATE_FORMAT(`login_date`,'%Y-%m-%d') BETWEEN '2012-02-25' AND '2014-03-04'
  AND `group_id` = 'XXXXXXX' 
  AND `deleted` = 0 
GROUP BY `reg_date`
ORDER BY `num_users` desc 
LIMIT 10

标签:join,subquery,sql,mysql
来源: https://codeday.me/bug/20191122/2056429.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有