递增sql中的计数
我目前正在为我的SQL类做一个作业,我遇到了一点小麻烦。作业的一部分要求“计算当前存在的订单数量,并从最近的订单日期开始按降序列出所有订单数据。”我可以使用计数功能,也可以单独显示所有数据。当我尝试将所有代码一起运行查询时,它会显示所有数据,但对于计数,当计数应等于9时,它会显示9行1。 代码递增sql中的计数,sql,oracle,Sql,Oracle,我目前正在为我的SQL类做一个作业,我遇到了一点小麻烦。作业的一部分要求“计算当前存在的订单数量,并从最近的订单日期开始按降序列出所有订单数据。”我可以使用计数功能,也可以单独显示所有数据。当我尝试将所有代码一起运行查询时,它会显示所有数据,但对于计数,当计数应等于9时,它会显示9行1。 代码 这就是分组的诀窍;若要计算,您需要丢失细节,但如果您试图通过将组拆分为更小的块来恢复细节,则每个组中的项目就不再那么多 这意味着您必须有两个查询,一个用于分组,另一个用于提供详细信息,然后将它们连接在一起
这就是分组的诀窍;若要计算,您需要丢失细节,但如果您试图通过将组拆分为更小的块来恢复细节,则每个组中的项目就不再那么多 这意味着您必须有两个查询,一个用于分组,另一个用于提供详细信息,然后将它们连接在一起:
SELECT *
FROM
orders o
INNER JOIN
(SELECT count(*) as ct FROM orders GROUP BY customer_number) g
ON o.customer_number = g.customer_number
或者您可以使用一个分析函数,它在概念上做同样的事情,但更高级一些(可能还没有教过):
注;我不知道你到底想在哪些栏目上进行统计和分组;我在这里选择了客户编号,因为我知道它的存在——这些查询将给出每个客户的订单数量以及订单的所有细节。使用GROUPBY的基本技巧是确定要计算每个唯一变量的某些列(例如,如果您想知道每个部门有多少名员工需要按部门id分组,因为如果有50名员工平均分配到10个部门,则“部门id”列中应该有10个不同的if数字,每个数字重复5次-group BY将生成一个10行的结果集,每个不同的部门id和id对应一行。)计数每行将产生5,因为这是以前折叠为一行的行数)
如果要统计系统中的所有订单,可以执行以下操作:
SELECT *
FROM
orders o
CROSS JOIN
(SELECT count(*) as ct FROM orders) g
我们必须在这里使用交叉连接,因为我们已经没有任何列要连接了——子查询只计算一个结果,我们希望它出现在每一行上,这就是交叉连接的作用:将左侧的每一行与右侧的每一行连接起来
SELECT
o.*,
COUNT(*) OVER() as ct
FROM
orders o
还请注意,您的作业要求按特定顺序输出行。我没有完成这部分,但我将把它作为练习留给您-不要忘记,因为它是规范的一部分,并且将被标记为,这是分组的诀窍;要统计数据,您需要丢失详细信息,但如果您试图恢复详细信息通过将组分成更小的块,每个组中的项目就不再那么多了 这意味着您必须有两个查询,一个用于分组,另一个用于提供详细信息,然后将它们连接在一起:
SELECT *
FROM
orders o
INNER JOIN
(SELECT count(*) as ct FROM orders GROUP BY customer_number) g
ON o.customer_number = g.customer_number
或者您可以使用一个分析函数,它在概念上做同样的事情,但更高级一些(可能还没有教过):
注意:我不知道您真正想要统计和分组的列是什么;我在这里选择customer number是因为我知道它的存在-这些查询将给出每个客户的订单数量以及订单的所有细节。使用group BY的基本技巧是确定要统计每个客户的唯一变化的一些列(例如,如果您想知道每个部门有多少名员工需要按部门id分组,因为如果有50名员工平均分配到10个部门,则“部门id”列中应该有10个不同的if数字,每个数字重复5次-group BY将生成一个10行的结果集,每个不同的部门id和id对应一行。)计数每行将产生5,因为这是以前折叠为一行的行数)
如果要统计系统中的所有订单,可以执行以下操作:
SELECT *
FROM
orders o
CROSS JOIN
(SELECT count(*) as ct FROM orders) g
我们必须在这里使用交叉连接,因为我们已经没有任何列要连接了——子查询只计算一个结果,我们希望它出现在每一行上,这就是交叉连接的作用:将左侧的每一行与右侧的每一行连接起来
SELECT
o.*,
COUNT(*) OVER() as ct
FROM
orders o
还请注意,您的作业要求按特定顺序输出行。我没有完成这一部分,但我将把它作为练习留给您-不要忘记它,因为它是规范的一部分,将被标记为使用“count(*)order\u NUMBER”而不是您正在使用的使用“count(*)order\u NUMBER”除了您正在使用的内容之外,还请共享预期的输出!!当您根据订单号对结果进行分组时,您的计数将始终为1,也可以从选择的
计数(订单号)中删除订单号
,订单号,订单日期,客户号
,但不包括计数!并按订单号,订单日期,客户号从组中删除订单号。我没有预期输出的图片,因为教授没有提供。从作业的措辞来看,他似乎在寻找行的总计数,然后希望表中的所有数据按降序列出。请共享预期的输出!!当您根据订单号对结果进行分组时,您的计数将始终为1。另外,请从选择计数(订单号)中删除订单号
,订单号,订单日期,客户号
,但不包括计数!并按订单号,订单日期,客户号从组中删除订单号。我没有预期输出的图片,因为教授没有提供。从作业的措辞来看,他似乎在寻找行的总计数,然后希望表中的所有数据按降序列出