给出SQL中的命令;
SELECT ...
FROM ...
GROUP BY ...
我可以按不在SELECT行中的内容进行分组吗?
答案 0 :(得分:3)
当然可以,例如
select
count(*)
from
some_table_with_updated_column
group by
trunc(updated, 'MM.YYYY')
答案 1 :(得分:3)
是的,你可以这样做,但如果你这样做,你将无法分辨出哪个组的结果。
因此,您几乎总是希望在select子句中返回您已分组的列。但你没必要。
答案 2 :(得分:3)
是
这常用于superaggregate查询,如下所示:
SELECT AVG(cnt)
FROM (
SELECT COUNT(*) AS cnt
FROM sales
GROUP BY
product
HAVING COUNT(*) > 10
) q
,汇总聚合。
答案 3 :(得分:2)
是的,你可以。例如:
select count(1)
from sales
group by salesman_id
当然,如果你的select子句(聚合函数除外)上有一些不属于group by子句的东西,你不能做什么。
答案 4 :(得分:1)
我可以选择GROUP BY中不存在的东西吗?
编写如下代码是可以的:
SELECT customerId, count(orderId) FROM orders
GROUP BY customerId, orderedOn
如果您想查明客户日期订单的数量。 但你反而无法做到这一点:
SELECT customerId, orderedOn count(orderId) FROM orders
GROUP BY customerId
您可以在组中没有的列上发出聚合函数。但是如果没有聚合函数,你不能在select行中给它。因为它没有多大意义。喜欢上面的查询。您只需按customerId进行订单计数,您希望日期也在输出中打印?? !!您没有将日期因素包含在组中以进行计数,那么它是否意味着要在其中包含日期?
答案 5 :(得分:0)
我不知道其他DBMS'但是DB2 / z,对于其中一个,这样做很好。不需要在选择部分中包含该列,但是,当然,它必须从表中提取数据以便聚合,因此您可能不会通过将其关闭来节省任何时间。您应该只选择所需的列,数据的聚合是一个单独的任务。
我非常肯定SQL标准允许这样做(尽管这只是基于大型机DB2产品非常接近它的知识)。