mysql - SQL语句大神请进。为什么只得到了一条数据?加个group by 才得到多条数据?
怪我咯
怪我咯 2017-04-17 11:29:28
[MySQL讨论组]
SELECT t.*,count(tbl_myr_share_comment.shareId) as count FROM
`tbl_myr_share` `t` LEFT JOIN tbl_myr_share_comment ON
tbl_myr_share_comment.shareId=t.shareId WHERE t.userId=1 ORDER BY
t.shareId DESC LIMIT 10;

明明数据库有4条数据,但是查询的结果出来是一条数据。

SELECT t.*,count(tbl_myr_share_comment.shareId) as count FROM
`tbl_myr_share` `t` LEFT JOIN tbl_myr_share_comment ON
tbl_myr_share_comment.shareId=t.shareId WHERE t.userId=1 GROUP BY
t.shareId ORDER BY t.shareId DESC LIMIT 10

但是我后面加一个group by则得到了正确的数据。
请问为什么有count的情况下加group 才能得到正确的数据呢?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
黄舟

这要针对数据表的具体情况进行分析,给你一些Group By的资料,其实思想很简单,自己好好琢磨一下,一定能思明白的!

GROUP BY 语句
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
SQL GROUP BY 语法

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

SQL GROUP BY 实例
我们拥有下面这个 "Orders" 表:

O_Id    OrderDate   OrderPrice  Customer
1   2008/12/29  1000    Bush
2   2008/11/23  1600    Carter
3   2008/10/05  700 Bush
4   2008/09/28  300 Bush
5   2008/08/06  2000    Adams
6   2008/07/21  100 Carter

现在,我们希望查找每个客户的总金额(总订单)。
我们想要使用 GROUP BY 语句对客户进行组合。
我们使用下列 SQL 语句:

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer

结果集类似这样:

Customer    SUM(OrderPrice)
Bush    2000
Carter  1700
Adams   2000

很棒吧,对不对?
让我们看一下如果省略 GROUP BY 会出现什么情况:

SELECT Customer,SUM(OrderPrice) FROM Orders

结果集类似这样:

Customer    SUM(OrderPrice)
Bush    5700
Carter  5700
Bush    5700
Bush    5700
Adams   5700
Carter  5700

上面的结果集不是我们需要的。
那么为什么不能使用上面这条 SELECT 语句呢?解释如下:上面的 SELECT 语句指定了两列(CustomerSUM(OrderPrice))。SUM(OrderPrice) 返回一个单独的值(OrderPrice 列的总计),而 Customer 返回 6 个值(每个值对应 Orders 表中的每一行)。因此,我们得不到正确的结果。不过,您已经看到了,GROUP BY 语句解决了这个问题。

大家讲道理

大概扫了一眼, 应该是犯了一个基本的错误:

sql在做分组计算的时候, select, having, order by里的列 一般来说, 必须是 "group by分组的列", 或者是 "聚集函数(别的列)" 这种形式.

具体说, select sum(a), b from table group by b; 是对的;
select * from table group by b 这种一般是错的(标准sql会报错, mysql不会, 但不代表就是对的)

你的第一个sql, 既然用到了count(), 那么就是把整张表作为一个分组来处理了.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号