首页 > SQL语句大神请进。为什么只得到了一条数据?加个group by 才得到多条数据?

SQL语句大神请进。为什么只得到了一条数据?加个group by 才得到多条数据?

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 才能得到正确的数据呢?


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

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(), 那么就是把整张表作为一个分组来处理了.


这要针对数据表的具体情况进行分析,给你一些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 语句解决了这个问题。

【热门文章】
【热门文章】