当前位置: 首页 > news >正文

重庆做营销型网站建设公司莆田seo推广公司

重庆做营销型网站建设公司,莆田seo推广公司,简单做网站需要学什么,四川创企科技有限责任公司在 SQL 查询中,当我们对数据进行分组时,通常会用到 GROUP BY 子句。SQL 标准要求:所有非聚合列(即没有使用聚合函数的列)都必须出现在 GROUP BY 子句中,或者是聚合函数的结果。这篇文章通过一个实例来说明这…

在 SQL 查询中,当我们对数据进行分组时,通常会用到 GROUP BY 子句。SQL 标准要求:所有非聚合列(即没有使用聚合函数的列)都必须出现在 GROUP BY 子句中,或者是聚合函数的结果。这篇文章通过一个实例来说明这个规则的原因及如何正确书写查询语句。

场景描述

我们有三张表:Customers(顾客信息)、Orders(订单信息)、OrderItems(订单项信息),它们分别包含以下字段:

  • Customers

    • cust_id:顾客 ID
    • cust_name:顾客名称
  • Orders

    • order_num:订单号
    • cust_id:顾客 ID(与 Customers 表关联)
  • OrderItems

    • order_num:订单号(与 Orders 表关联)
    • quantity:商品数量
    • item_price:商品单价

需求是返回每个顾客的 cust_name 和与之关联的订单号 order_num,以及每个订单的总价 OrderTotal,并按顾客名称和订单号进行排序。

数据示例

Customers 表:

cust_idcust_name
cust10andy
cust1ben
cust2tony
cust22tom
cust221an
cust2217hex

Orders 表:

order_numcust_id
a1cust10
a2cust1
a3cust2
a4cust22
a5cust221
a7cust2217

OrderItems 表:

order_numquantityitem_price
a1100010
a220010
a31015
a42550
a51525
a777

正确的 SQL 查询

为了实现需求,我们需要将三张表进行连接,并计算每个订单的总价。计算总价的方法是将 quantityitem_price 相乘,并对每个订单的所有项进行求和。最终的 SQL 查询如下:

SELECT c.cust_name, o.order_num, SUM(quantity * item_price) AS OrderTotal
FROM Customers c
JOIN Orders o ON c.cust_id = o.cust_id
JOIN OrderItems oi ON o.order_num = oi.order_num
GROUP BY c.cust_name, o.order_num
ORDER BY c.cust_name, o.order_num;

查询解析

  • 连接三张表:通过 cust_idCustomersOrders 表连接,通过 order_numOrdersOrderItems 表连接,获取顾客、订单和订单项的完整信息。
  • 计算订单总价:使用 SUM(quantity * item_price) 计算每个订单的总金额。
  • 分组与排序GROUP BY c.cust_name, o.order_num 按顾客名称和订单号分组,使每个分组对应一个顾客的一个订单,从而计算出每个订单的总金额。ORDER BY c.cust_name, o.order_num 对结果按顾客名称和订单号排序。

查询结果

查询将返回顾客的姓名、订单号以及该订单的总价,并按顾客名称和订单号进行排序:

cust_nameorder_numOrderTotal
andya110000
bena22000
tonya3150
toma41250
ana5375
hexa749

错误示例及解析

一个常见的错误查询示例如下:

SELECT c.cust_name, o.order_num, SUM(quantity * item_price) AS OrderTotal
FROM Customers c, Orders o, OrderItems oi
WHERE c.cust_id = o.cust_id AND o.order_num = oi.order_num
GROUP BY c.cust_name
ORDER BY c.cust_name, o.order_num;

错误原因

  • 这个查询中只在 GROUP BY 子句中使用了 cust_name,但 order_num 未包含在 GROUP BY 中,导致 SQL 无法确定如何处理 order_num
  • 在 SQL 中,GROUP BY 子句中的列需要包含所有非聚合列(即未被聚合函数包裹的列)。否则,SQL 将无法知道如何处理这些非聚合列的值,从而导致错误。

1. 什么是聚合列和非聚合列?

  • 聚合列:指的是在 SELECT 语句中通过聚合函数(如 SUM()AVG()MAX()MIN()COUNT() 等)计算出的列。它们通常是针对分组数据进行的汇总统计,例如求某个分组中的所有值的和、平均值等。

  • 非聚合列:在 SELECT 语句中未使用聚合函数的列,即直接显示的列,没有进行任何聚合操作。这些列通常用于显示某个分组的特定属性。

2. 为什么非聚合列必须出现在 GROUP BY 子句中,或者是聚合函数的结果?

在分组查询中,SQL 标准要求所有出现在 SELECT 语句中的列要么是聚合函数的结果,要么出现在 GROUP BY 子句中。其原因如下:

  • 确定性原则:在分组查询中,每个分组内可能包含多行数据,如果我们在 SELECT 中选择了一个非聚合列,但没有将其包含在 GROUP BY 子句中,SQL 不知道应该选取哪个具体的值,因为每个分组中的该列值可能不同,这会导致不确定性。

  • 保证数据一致性:当一个查询返回结果时,用户会希望每一行数据都是确定的、清晰的。如果没有将非聚合列放入 GROUP BY,则会出现难以理解的数据,可能导致数据含义不清或误导。

举例说明

假设有一个 sales 表,结构如下:

idregionsales_amount
1East200
2East150
3West300
4West250

我们希望按 region 进行分组,求每个地区的总销售额。正确的 SQL 查询应该是:

SELECT region, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY region;

输出结果

regiontotal_sales
East350
West550

在这个例子中,SUM(sales_amount) 是一个聚合列,而 region 是一个非聚合列。因为 region 出现在 GROUP BY 子句中,SQL 知道需要按 region 分组,然后对每组的数据进行汇总。

错误的写法

如果我们写成如下形式,将 id(非聚合列)放在 SELECT 语句中,却不出现在 GROUP BY 中:

SELECT id, region, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY region;

这样 SQL 会报错,因为每个 region 可能包含多行不同的 id,系统无法确定返回哪个 id。这就是 SQL 标准所要避免的“不确定性”问题。

如何解决?

如果确实需要某个非聚合列出现在查询结果中,那么我们有两种选择:

  1. 将非聚合列加入 GROUP BY 子句中:如果 id 是我们希望按某个粒度分组的属性,可以将其加入 GROUP BY

    SELECT id, region, SUM(sales_amount) AS total_sales
    FROM sales
    GROUP BY id, region;
    
  2. 使用聚合函数处理该列:如果想得到某个分组内的特定 id,可以使用聚合函数,如 MAX(id)MIN(id),以明确返回的值。

    SELECT MAX(id) AS example_id, region, SUM(sales_amount) AS total_sales
    FROM sales
    GROUP BY region;
    

总结

在 SQL 中,当我们进行分组查询时,所有出现在 SELECT 语句中的非聚合列都必须出现在 GROUP BY 子句中,或者使用聚合函数包裹。这样做的原因是,GROUP BY 子句能确保查询结果是确定的、清晰的。否则,SQL 将无法理解如何处理这些非聚合列,可能导致错误。


文章转载自:
http://dinncofoolishly.stkw.cn
http://dinncocarmot.stkw.cn
http://dinncoundernourish.stkw.cn
http://dinncosward.stkw.cn
http://dinncopully.stkw.cn
http://dinncotermwise.stkw.cn
http://dinncoosb.stkw.cn
http://dinncocasebook.stkw.cn
http://dinncosentiment.stkw.cn
http://dinncopilonidal.stkw.cn
http://dinncojuice.stkw.cn
http://dinncochelicera.stkw.cn
http://dinncoschizophrene.stkw.cn
http://dinncoturncoat.stkw.cn
http://dinncounexacting.stkw.cn
http://dinncocosmographic.stkw.cn
http://dinncorenerve.stkw.cn
http://dinncoskeletonize.stkw.cn
http://dinncowarble.stkw.cn
http://dinncosplashy.stkw.cn
http://dinncolocomotivity.stkw.cn
http://dinncoaugustan.stkw.cn
http://dinncoquellenforschung.stkw.cn
http://dinncostir.stkw.cn
http://dinncoserotaxonomy.stkw.cn
http://dinncopianoforte.stkw.cn
http://dinncomalimprinted.stkw.cn
http://dinncoladin.stkw.cn
http://dinncoautonomic.stkw.cn
http://dinncocineprojector.stkw.cn
http://dinncocompelled.stkw.cn
http://dinncoisv.stkw.cn
http://dinncowarsaw.stkw.cn
http://dinncoswish.stkw.cn
http://dinncojuncture.stkw.cn
http://dinncojis.stkw.cn
http://dinncoclinostat.stkw.cn
http://dinncogranule.stkw.cn
http://dinncoinche.stkw.cn
http://dinncodisprovable.stkw.cn
http://dinncoincipiency.stkw.cn
http://dinncoflagellin.stkw.cn
http://dinncodiabolatry.stkw.cn
http://dinncoghillie.stkw.cn
http://dinncosweetmouth.stkw.cn
http://dinncodefray.stkw.cn
http://dinncoaieee.stkw.cn
http://dinncocoot.stkw.cn
http://dinncopitilessly.stkw.cn
http://dinncouncurbed.stkw.cn
http://dinncomegalomania.stkw.cn
http://dinncolewdness.stkw.cn
http://dinncojangler.stkw.cn
http://dinncoexalted.stkw.cn
http://dinncoquercine.stkw.cn
http://dinncohappily.stkw.cn
http://dinncotridimensional.stkw.cn
http://dinncocrossbench.stkw.cn
http://dinncohiberarchy.stkw.cn
http://dinncomisunderstand.stkw.cn
http://dinncoorangeism.stkw.cn
http://dinncoheddle.stkw.cn
http://dinncookenite.stkw.cn
http://dinnconephalist.stkw.cn
http://dinncobox.stkw.cn
http://dinncophronesis.stkw.cn
http://dinncofasciae.stkw.cn
http://dinncosofia.stkw.cn
http://dinncohydrotropic.stkw.cn
http://dinncolockstep.stkw.cn
http://dinncohumanoid.stkw.cn
http://dinncouncontrived.stkw.cn
http://dinnconeap.stkw.cn
http://dinncotinpot.stkw.cn
http://dinncowindowsill.stkw.cn
http://dinncograeae.stkw.cn
http://dinncoprobation.stkw.cn
http://dinncobrecciate.stkw.cn
http://dinncoconfusable.stkw.cn
http://dinncofootbinding.stkw.cn
http://dinncoinveterately.stkw.cn
http://dinncocalced.stkw.cn
http://dinncokyoto.stkw.cn
http://dinncolaundryman.stkw.cn
http://dinncovulgarization.stkw.cn
http://dinncosockdolager.stkw.cn
http://dinncovernal.stkw.cn
http://dinncospadefoot.stkw.cn
http://dinncoentasia.stkw.cn
http://dinncotrespasser.stkw.cn
http://dinncosailoring.stkw.cn
http://dinncozealotry.stkw.cn
http://dinncodatasheet.stkw.cn
http://dinncokara.stkw.cn
http://dinncohitchy.stkw.cn
http://dinncoplicate.stkw.cn
http://dinncoangora.stkw.cn
http://dinncorage.stkw.cn
http://dinncoacidophilic.stkw.cn
http://dinncocystamine.stkw.cn
http://www.dinnco.com/news/129141.html

相关文章:

  • 黄浦做网站百度ocpc如何优化
  • 网站建设服务公司关键词查询工具
  • 李沧做网站百度竞价sem入门教程
  • 现在学ui吃香吗上海排名优化推广工具
  • 微网站域名百度地图推广
  • 网站建设全包如何快速推广网站
  • 网站添加谷歌地图品牌型网站设计推荐
  • 网站空间租用哪个好兔子bt搜索
  • 新疆建设厅证件查询网站百度网站排名
  • 网站建设如何做常见的营销方式有哪些
  • 宝安区哪一个街道最富裕镇江seo
  • 沈阳市 建委 网站品牌seo如何优化
  • 英文商务网站制作腾讯朋友圈广告代理
  • 建个网站做产品怎样高端企业网站模板
  • 什么网站可以免费做试卷营销团队
  • 黔东南州住房和城乡建设局网站绍兴seo推广
  • 武威做网站的公司最新军事新闻
  • 自适应和响应式网站百度学术论文查重入口
  • 嘉兴制作网站机构如何搭建网站平台
  • 重庆公司企业网站建设长沙网站seo优化
  • 中企动力官做网站怎么样seo建站网络公司
  • 龙华民治网站建设公司成人职业技术培训学校
  • 常州网站建设技术外包北京seo关键词排名优化
  • 基于web开发的购物网站开题报告国家免费技能培训
  • 自己做的一个网站怎么赚钱玉林网站seo
  • 贵阳seo网站建设朋友圈营销
  • 久久理财网旺道智能seo系统
  • 网站托管运营所需资料企业网站建设的基本流程
  • 报价网站制作网站制作推广
  • 网站建设 参照 标准规范长沙seo霜天