zoukankan      html  css  js  c++  java
  • sql关于group by的问题

    今天在做asp.net的时候遇到了些小问题,有个要求:
    添加一个数据源控件,通过多表查询,找出销售量在前十的产品。(在SalesOrderDetail表的OrderQty字段表示订货量,希望大家先尝试自己写查询语句,实在没办法解决才去看参考答案。)
    
    有个屁的参考答案呀!!! 只好自己写语句,在这过程中复习了很多关于sql语句的知识。 遇到最多的情况就是: 选择列表中的列 'Product.ModifiedDate' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。 这个主要是对group by 的不了解。 网上找到了这样一段话:
    选择列表中有形如SUM,COUNT等聚合函数,需要将所有SELECT的列加入到GROUP BY子句中去,你选择了ApprovalID列在GROUP BY子句中没有ApprovalID,所以会报错。
    
    也就是如果要用group by,要显示的字段就都必须添加到group by 里面去。 让我们分析一下group by 的过程:
    先执行select 的操作返回一个程序集,
    --然后去执行分组的操作,这时候他将根据group by 后面的字段
    --进行分组,并且将相同的字段并称一列数据,如果group by 后面没有这个字段的话就要分成好多的数据。
    --但是分组就只能将相同的数据分成两列数据,而一列中又只能放入一个字段,所以那些没有进行分组的
    --数据系统不知道将数据放入哪里,所以就出现此错误
    
    附下午写的sql语句:
    select top(10) Product.* from Product  left join SalesOrderDetail on  Product.ProductID=  SalesOrderDetail.ProductID where( SalesOrderDetail.ProductID= any(select top(10) SalesOrderDetail.ProductID
    from SalesOrderDetail group by SalesorderDetail.ProductID order by sum(SalesOrderDetail.OrderQty) desc)) group by Product.ProductID,Product.Name,ProductNumber,Product.Color,Product.Size,Product.Weight,Product.Price,Product.ProductSubcategoryID,Product.rowguid,Product.ModifiedDate
    
    
    逗了。。 弄得这么复杂 应该这样
    SELECT TOP(10) 
    Product.ProductID, Product.Name, Product.Color,UnitPrice,sum(SalesOrderDetail.OrderQty)as TotalOrderQty
    FROM Product INNER JOIN SalesOrderDetail 
    ON Product.ProductID = SalesOrderDetail.ProductID group by Product.ProductID,Product.Name,Product.Color,UnitPrice 
    order by sum(SalesOrderDetail.OrderQty) desc
    
    
  • 相关阅读:
    Kafka的安装和设置
    Nginx的安装和设置
    Spark实现K-Means算法
    Spark GraphX实例(2)
    Scala字符串插值
    Scala的Class、Object和Apply()方法
    Spark GraphX实例(1)
    java.lang.ClassNotFoundException: SparkPi$$anonfun$1
    Intellij IDEA连接Spark集群
    Container [pid=6263,containerID=container_1494900155967_0001_02_000001] is running beyond virtual memory limits
  • 原文地址:https://www.cnblogs.com/iamchao/p/3677150.html
Copyright © 2011-2022 走看看