SELECT dates,
SUM(Total_Likes) AS Total_likes,
SUM(Real_Like) AS Real_Like,
SUM(Secret_like) AS Secret_like
FROM
(
SELECT CAST(added_datetime AS DATE) AS dates,
SUM(IF(like_flag=1,1,-1)) AS Total_Likes,
(
SELECT SUM(IF(like_flag=1,1,-1))
FROM like_message_audit_log la
WHERE user_profile_type=1 AND CAST(added_datetime AS DATE)= '2017-07-21'
AND like_mode IN(1,2)
GROUP BY user_profile_id_fk
) AS Real_Like,
(
SELECT SUM(IF(like_flag=1,1,-1))
FROM like_message_audit_log la
WHERE user_profile_type=2 AND CAST(added_datetime AS DATE)= '2017-07-21'
AND like_mode IN(1,2)
GROUP BY user_profile_id_fk
)AS Secret_like
FROM like_message_audit_log la
WHERE CAST(added_datetime AS DATE)= '2017-07-21'
AND like_mode IN(1,2)
)AS t
GROUP BY dates;
上面的查询只运行了一个日期获取数据,但我想两个日期 之间运行的日期范围如何编写查询请建议如何在查询中使用联接从多个子查询
像上述查询的输出是: 日期TOTAL_LIKES Real_Like Secret_like 2017年7月21日16 15 1
我重写上述查询等:
SELECT dates,
SUM(Total_Likes) AS Total_likes,
SUM(real_likes_count) AS Real_Like,
SUM(secret_likes_count) AS Secret_like
FROM
(
SELECT
CAST(added_datetime AS DATE) AS Dates,
like_mode AS modes,
COUNT(CASE WHEN like_flag=1 THEN 1 END) AS Total_Likes,
COUNT(CASE WHEN like_flag=1 AND user_profile_type=1 THEN 1 END) AS real_likes_count,
COUNT(CASE WHEN like_flag=1 AND user_profile_type=2 THEN 1 END) AS secret_likes_count
FROM like_message_audit_log la
WHERE added_datetime IN
( SELECT MAX(lb.added_datetime) AS added_datetime
FROM like_message_audit_log lb
WHERE la.user_profile_id_fk=la.user_profile_id_fk AND lb.message_unique_id_fk=la.message_unique_id_fk
GROUP BY user_profile_id_fk, message_unique_id_fk
)
GROUP BY CAST(added_datetime AS DATE)
)AS t
WHERE dates BETWEEN '2017-07-21' AND '2017-08-04'
AND modes IN(1,2)
GROUP BY Dates
ORDER BY Dates DESC;
此查询工作,但花太多时间 我可以优化上面的查询
尝试谷歌'之间' – RealCheeseLord
那些'SELECT SUM(...)'子查询将无法正常工作。当你使用'SELECT'作为一个值时,它必须返回一行。 – Barmar
@Barmar完美之一.. !! –