Mysql 关联表中 group by 多余字段显示你用对了吗?


SELECT

GROUP_CONCAT(DISTINCT t1.order_uuid) AS order_uuid ,

t4.depart_name,

t4.uuid

FROM

itsm_order_assign t1

INNER JOIN itsm_order t2 ON

t2.uuid = t1.order_uuid

INNER JOIN suninfo_userasset.t_user_info t3 ON

t3.uuid = t1.assign_user

INNER JOIN suninfo_userasset.t_department_info t4 ON

t4.uuid = t3.depart_uuid

WHERE

t3.status = 1

AND t1.assign_type IN (2, 3, 4)

AND t1.create_time >= 1684598400

AND t1.create_time <= 1684684799

GROUP BY

t4.uuid

在我的回答中,c.category_name 确实没有在 GROUP BY 子句中指定,这意味着按照这个字段分组时,出现了多个不同的值。

在标准的 SQL 中,如果你在 SELECT 子句中使用了一个没有在 GROUP BY 子句中出现的列,那么 SQL 引擎会尝试对这个列进行聚合操作来计算这个列上的值。对于某些数据库系统来说,这个行为是可以关闭或禁用的。如果启用了这个行为,则 SQL 引擎可以在不被统一的列上使用聚合函数,比如 SUM()AVG()COUNT() 等计算所有符合条件的记录的值。

但是,不同的数据库系统可能会有不同的默认行为。有些数据库系统可能会抛出一个错误,告诉你不能在 SELECT 子句中使用未出现在 GROUP BY 子句中的列。因此,在使用此语句时,最好将所有要在列中显式出现的列都包含在 GROUP BY 子句中,并明确指定聚合函数来计算其他列的值。

再次抱歉之前的误导,希望我的更正对你有所帮助。
```
SQL 示例
假设我们有两个表 categories 和 products,其中 categories 包含类别的信息,products 包含产品的信息和所属的类别 ID。我们想要查询每个类别的 ID、名称和产品数量。

SELECT c.id, c.category_name, COUNT(p.id) AS product_count
FROM categories c
LEFT JOIN products p ON c.id = p.category_id
GROUP BY c.id, c.category_name
ORDER BY c.id;
SQL
以上 SQL 语句将使用 LEFT JOIN 操作符,联结 categories 和 products 表格数据,以便获取每个类别及其下的产品数量。这里使用 COUNT 聚合函数统计每个类别下的产品数量。在 GROUP BY 子句中指定了 c.id 和 c.category_name,以分类分组数据。最后使用 ORDER BY 子句按 c.id 排序结果集。

博客文章总结
SQL 中使用 LEFT JOIN 进行表格联结时,能够获取左边表格所有的数据和右边表格中匹配的数据,对于右边表格没有匹配的数据,使用 NULL 值代替。这对于需要查询某些有 NULL 值的数据非常有用。

在查询数据时,可以使用聚合函数进行统计,如 COUNT、SUM、AVG 等。在 GROUP BY 子句中指定按照某个字段分组,从而进行数据分类统计。使用 ORDER BY 子句进行排序。

数据库设计时,需要考虑表格之间的关联关系。在本例中,products 表格中的 category_id 字段被用来与 categories 表格中的 id 字段建立起关联关系。这样就能够方便地查询类别下的所有产品。

SQL 语句的优化对于查询效率至关重要。在本例中,使用 LEFT JOIN 操作符会产生较高的开销,当数据量大时,效率会降低。要尽可能使用 INNER JOIN 操作符,避免使用子查询,使用索引优化查询等方式来提高查询效率。

希望这些博客文章总结对于大家学习SQL有所帮助。

本作品采用《CC 协议》,转载必须注明作者和本文链接
MissYou-Coding
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!