首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL中的子查询计数字符串

MySQL中的子查询计数字符串
EN

Stack Overflow用户
提问于 2013-02-22 20:40:25
回答 2查看 1.9K关注 0票数 0
代码语言:javascript
运行
复制
LEFT JOIN
(
    SELECT user_id, review, COUNT(user_id) totalCount
    FROM reviews
    GROUP BY user_id
) b ON b.user_id= b.user_id 

我试着把WHERE LENGTH(review) > 100装在这个地方,但是每次我把它放进去,都会给我带来问题。

上面的子查询包括了user_id的所有评论。我只想再加一个条件。只有大于100长度的计数检查。

顺便提一句,我已经看到了函数CHAR_LENGTH --不确定我是否也需要它。

编辑:

以下是完全符合我的需求的完整查询:

代码语言:javascript
运行
复制
    static public $top_users = "
            SELECT  u.username, u.score,
            (COALESCE(a.totalCount, 0) * 4) +
            (COALESCE(b.totalCount, 0) * 5) +
            (COALESCE(c.totalCount, 0) * 1)  +
            (COALESCE(d.totalCount, 0) * 2)  +
            (COALESCE(u.friend_points, 0)) AS totalScore
            FROM users u 
            LEFT JOIN
                (
                    SELECT user_id, COUNT(user_id) totalCount
                    FROM items 
                    GROUP BY user_id
                ) a ON a.user_id= u.user_id
            LEFT JOIN
                (
                    SELECT user_id, COUNT(user_id) totalCount
                    FROM reviews
                    GROUP BY user_id
                ) b ON b.user_id= u.user_id
            LEFT JOIN
                (
                    SELECT user_id, COUNT(user_id) totalCount
                    FROM ratings
                    GROUP BY user_id
                ) c ON c.user_id = u.user_id
             LEFT JOIN
                (
                    SELECT user_id, COUNT(user_id) totalCount
                    FROM comments
                    GROUP BY user_id
                ) d ON d.user_id = u.user_id

                ORDER BY totalScore DESC LIMIT 25;";
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-22 20:42:09

LENGTH()返回以字节为单位的字符串长度。您可能需要CHAR_LENGTH(),因为它会给出实际的字符。

代码语言:javascript
运行
复制
SELECT user_id, review, COUNT(user_id) totalCount
FROM reviews
WHERE CHAR_LENGTH(review) > 100
GROUP BY user_id, review

您也没有正确地使用GROUP BY

见文件

票数 3
EN

Stack Overflow用户

发布于 2013-02-22 21:29:26

您想要的查询是:

代码语言:javascript
运行
复制
LEFT JOIN
                (
                    SELECT user_id, COUNT(user_id) totalCount,
                           sum(case when length(review) > 100 then 1 else 0 end
                              ) as NumLongReviews
                    FROM reviews
                    GROUP BY user_id
                ) b ON b.user_id= b.user_id 

这既包括评论,也包括“长”评论。这个计数是使用嵌套在case函数中的一个sum()语句完成的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15032814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档