请问这个sql语句(SELECT * FROM com_live_get_record WHERE bid = 6 GROUP BY get_uid ORDER BY get_uid)和另一个sql语句 (SELECT * FROM(SELECT * FROM com_live_get_record GROUP BY get_uid ORDER BY get_uid) c WHERE c.bid = 6)查询结果为何不一样?
时间: 2024-04-18 08:27:29 浏览: 13
这两个 SQL 查询语句的结果不一样是因为它们的执行顺序和逻辑不同。
第一个查询语句是先筛选出 `bid=6` 的记录,然后按照 `get_uid` 进行分组,并按照 `get_uid` 进行排序。这样得到的结果集中每个组只有一个记录,且按照 `get_uid` 排序。
而第二个查询语句是先按照 `get_uid` 进行分组,并按照 `get_uid` 进行排序,然后再从这个结果集中筛选出 `bid=6` 的记录。这样得到的结果集中可能会包含多个 `bid=6` 的记录,因为在分组之前没有进行 `bid` 的筛选。
因此,这两个查询语句得到的结果集不同。
相关问题
SELECT c.*,count(c.get_uid) FROM( SELECT s.sid,s.store_name,r.rid,r.get_uid,MAX(r.title) FROM com_offline_store s left JOIN com_live_get_record r ON r.bid = s.sid GROUP BY r.rid ) c WHERE c.sid = 6这句sql怎么满足同时两个字段分组
要满足同时对两个字段进行分组,你可以在 GROUP BY 子句中指定这两个字段。下面是修改后的 SQL 查询语句:
```sql
SELECT c.*, COUNT(c.get_uid)
FROM (
SELECT s.sid, s.store_name, r.rid, r.get_uid, MAX(r.title)
FROM com_offline_store s
LEFT JOIN com_live_get_record r ON r.bid = s.sid
WHERE s.sid = 6
GROUP BY s.sid, r.get_uid
) c;
```
在上面的查询语句中,我们在内部子查询中添加了 `WHERE s.sid = 6` 条件来筛选出 `sid=6` 的记录。然后,在内部子查询的 GROUP BY 子句中,我们同时指定了 `s.sid` 和 `r.get_uid` 两个字段进行分组。
最外层的查询语句使用了 `COUNT(c.get_uid)` 来统计每个分组内的 `get_uid` 记录数,并通过 `c.*` 返回内部子查询的其他字段。
请注意,根据你的需求,你可能需要根据实际情况调整查询语句和字段。
where del_flag=0 和 id如果为空的话,用bid=0这个sql怎么写
您可以使用以下 SQL 语句来实现:
```
SELECT * FROM table_name WHERE del_flag=0 AND (id IS NULL OR id='') AND bid=0;
```
这个 SQL 语句的意思是从 `table_name` 表中选择所有 `del_flag` 为 0 并且 `id` 是空或者为 null,以及 `bid` 等于 0 的记录。