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 才能得到正确的数据呢?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这要针对数据表的具体情况进行分析,给你一些
Group By的资料,其实思想很简单,自己好好琢磨一下,一定能思明白的!SQL GROUP BY 实例
我们拥有下面这个 "Orders" 表:
现在,我们希望查找每个客户的总金额(总订单)。
我们想要使用 GROUP BY 语句对客户进行组合。
我们使用下列 SQL 语句:
结果集类似这样:
很棒吧,对不对?
让我们看一下如果省略 GROUP BY 会出现什么情况:
结果集类似这样:
上面的结果集不是我们需要的。
那么为什么不能使用上面这条 SELECT 语句呢?解释如下:上面的
SELECT语句指定了两列(Customer和SUM(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(), 那么就是把整张表作为一个分组来处理了.