Sql 我可以按不在选择行中的内容分组吗?

Sql 我可以按不在选择行中的内容分组吗?,sql,Sql,在SQL中给出一个命令 SELECT ... FROM ... GROUP BY ... 我可以按选择行以外的内容分组吗?当然可以,例如 select count(*) from some_table_with_updated_column group by trunc(updated, 'MM.YYYY') 当然可以 select count(*) from some_table_with_updated_column grou

在SQL中给出一个命令

SELECT ...
    FROM ...
    GROUP BY ...
我可以按选择行以外的内容分组吗?

当然可以,例如

select 
   count(*)
from  
   some_table_with_updated_column
group by 
   trunc(updated, 'MM.YYYY') 
当然可以

select 
   count(*)
from  
   some_table_with_updated_column
group by 
   trunc(updated, 'MM.YYYY') 
是的,你可以。例如:

select count(1) 
  from sales
 group by salesman_id
当然,如果select子句中除了聚合函数之外还有其他不属于group by子句的函数,那么您不能做什么。

是的,您可以。例如:

select count(1) 
  from sales
 group by salesman_id

当然,如果在select子句上有不属于group by子句的聚合函数以外的其他函数,您就不能做什么。

我不知道其他DBMS的情况,但是DB2/z可以做得很好。不需要在select部分中包含该列,但当然,它必须从表中提取数据以进行聚合,因此您可能不需要关闭它来节省任何时间。您应该只选择所需的列,数据聚合是一项独立的任务


我非常确定SQL标准允许这样做,尽管这只是基于大型机DB2产品非常接近它的知识。

我不知道其他DBM的情况,但DB2/z就可以做到这一点。不需要在select部分中包含该列,但当然,它必须从表中提取数据以进行聚合,因此您可能不需要关闭它来节省任何时间。您应该只选择所需的列,数据聚合是一项独立的任务


我非常确定SQL标准允许这样做,尽管这只是基于大型机DB2产品非常接近它的知识。

是的,您可以这样做,但是如果这样做,您将无法判断哪个结果是针对哪个组的


因此,您几乎总是希望返回select子句中分组所依据的列。但是你不必这样做。

是的,你可以这样做,但是如果你这样做了,你将无法判断哪个结果适用于哪个组

因此,您几乎总是希望返回select子句中分组所依据的列。但是你不必这样做。

是的

这通常用于超聚合查询,如下所示:

SELECT  AVG(cnt)
FROM    (
        SELECT  COUNT(*) AS cnt
        FROM    sales
        GROUP BY
                product
        HAVING  COUNT(*) > 10
        ) q
,它聚合了聚合体。

这通常用于超聚合查询,如下所示:

SELECT  AVG(cnt)
FROM    (
        SELECT  COUNT(*) AS cnt
        FROM    sales
        GROUP BY
                product
        HAVING  COUNT(*) > 10
        ) q

,它聚合了聚合。

嗯,我认为问题应该是相反的,比如

我可以选择组中没有的内容吗

可以编写如下代码:

SELECT customerId, count(orderId) FROM orders
 GROUP BY customerId, orderedOn
如果您想了解客户按日期完成的订单数量。 但你不能反过来做:

SELECT customerId, orderedOn count(orderId) FROM orders
 GROUP BY customerId

您可以对group by中不存在的列发出聚合函数。但如果没有聚合函数,则无法在选择行中给出它。因为这没有多大意义。类似于上面的查询。您只需按customerId对订单计数进行分组,并且希望在输出中也打印日期??!!你没有把日期因素包括在小组中进行计数,那么在其中加入日期是否意味着什么呢?

嗯,我认为问题应该是相反的,比如

我可以选择组中没有的内容吗

可以编写如下代码:

SELECT customerId, count(orderId) FROM orders
 GROUP BY customerId, orderedOn
如果您想了解客户按日期完成的订单数量。 但你不能反过来做:

SELECT customerId, orderedOn count(orderId) FROM orders
 GROUP BY customerId

您可以对group by中不存在的列发出聚合函数。但如果没有聚合函数,则无法在选择行中给出它。因为这没有多大意义。类似于上面的查询。您只需按customerId对订单计数进行分组,并且希望在输出中也打印日期??!!如果不在组中包含日期因素进行计数,那么在其中包含日期是否意味着什么呢?

不幸的是,MySQL允许您将所有内容都放在select子句中,即使它不在group by中。这会导致实际执行中断的查询。这样一来,问题往往被隐藏起来,很难找到。哇。。。我不知道。听到这个消息很难过。感谢您的评论。不幸的是,MySQL确实允许您将所有内容都放在select子句中,即使它不在GROUPBY中。这会导致实际执行中断的查询。这样一来,问题往往被隐藏起来,很难找到。哇。。。我不知道。听到这个消息很难过。感谢您的评论。zaping-如果只是在SQL命令行中键入一条语句来尝试它,那么工作量太大了,我们怎么能指望这个可怜的家伙从忙碌的一天中抽出时间回到这里,接受帮助过他的人的回答呢?如果只是在SQL命令行中键入一条语句来尝试一下,那就太麻烦了,我们怎么能指望这个可怜的家伙从忙碌的一天中抽出时间回到这里,接受帮助过他的人的回答呢?