Mysql语言select嵌套语句_如何在SQL中嵌套select语句?

5 个答案:

答案 0 :(得分:2)

子查询和加入适合您

SELECT DISTINCT u1.UserID

FROM

UserClicks u1

INNER JOIN

(

SELECT

UserID

FROM

UserClicks

WHERE

(Date > :monthBeforeStartDate AND Date < :startDate)

) u2

ON u1.UserID = u2.UserID

WHERE

(u1.Date > :startDate AND u1.Date < :endDate)

答案 1 :(得分:0)

如果你的查询挂起,那是因为索引,为了优化外部查询和内部查询,你需要像这样的索引:

create index du on UserClicks (Date, User_ID)

create index ud on UserClicks (User_ID, Date)

它应该立即返回。有关mysql如何优化使用IN运算符指定的子查询的更多详细信息:

MySQL取代了子查询

跟随索引查找的表单

函数,EXPLAIN描述为

特殊连接类型(unique_subquery或

index_subquery):

... IN(SELECT indexed_column FROM

single_table ...)

答案 2 :(得分:0)

SELECT COUNT(DISTINCT User_ID) AS total

FROM UserClicks

WHERE (Date BETWEEN startDate AND endDate) AND User_ID IN (

SELECT User_ID

FROM UserClicks

WHERE (Date BETWEEN monthBeforeStartDate AND startDate)

) GROUP BY User_ID

答案 3 :(得分:0)

我在mysql中使用子查询很困难,其中两个查询都使用相同的表。我的解决方案一直是使用连接

SELECT COUNT(DISTINCT User_ID) AS total

FROM UserClick u1

JOIN UserClick u2

on u2.User_ID = u1.User_ID

WHERE u1.Date BETWEEN :startDate AND :endDate

AND u2.Date BETWEEN :monthBeforeStartDate and :startDate

答案 4 :(得分:0)

我很好奇......你为什么不在这里发表更详细的陈述?

SELECT COUNT(DISTINCT User_ID) AS total

FROM UserClicks

WHERE (Date > :startDate AND Date < :endDate)

AND (Date > :monthBeforeStartDate AND Date < :startDate)

更新:

您似乎想要计算在startDate之前点击的startDate和endDate之间点击的用户数量。

根据您的日期是否为MySQL友好格式(如YYYY-MM-DD HH:MM:SS),您可以使用MySQL获取开始日期之前的月份。示例如下:

SELECT COUNT(DISTINCT User_ID) AS total

FROM UserClicks

WHERE (Date > :startDate AND Date < :endDate)

AND (Date > DATE_SUB(:startDate, INTERVAL 1 MONTH) AND Date < :startDate)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值