teradata sql assistant在限制时给我一个错误?

teradata sql assistant在限制时给我一个错误?,sql,teradata,teradata-sql-assistant,Sql,Teradata,Teradata Sql Assistant,我是Teradata的新手,很难限制结果。我想做的是得到最大值 现在,它只是给了我一个名为SELECT Failed的错误。3706:。有人能告诉我我做错了什么吗 我还有一个问题,我有一个名为site='Y'的过滤器。有人能告诉我为什么我也要现场分组吗。否则,我的查询将不会运行。非常感谢你的帮助 SELECT short_sku , Count(item_full_sku) FROM category GROUP BY short_sku, onsite HAVING o

我是Teradata的新手,很难限制结果。我想做的是得到最大值

现在,它只是给了我一个名为
SELECT Failed的错误。3706:
。有人能告诉我我做错了什么吗

我还有一个问题,我有一个名为
site='Y'
的过滤器。有人能告诉我为什么我也要现场分组吗。否则,我的查询将不会运行。非常感谢你的帮助

SELECT
      short_sku
    ,  Count(item_full_sku)
FROM category 
GROUP BY short_sku, onsite
HAVING onsite = 'Y'  
ORDER BY Count(full_sku) DESC LIMIT 1

您想使用
TOP
功能:

选择前1名
短单品
,计数(项目\u完整\u sku)
从类别
其中现场='Y'
按短sku分组
按计数订购(完整sku)说明
;

如果要筛选出where
onsite='Y'
行,应将其移动到
where
子句中。
HAVING
子句用于筛选出聚合。

要使用
TOP
功能:

选择前1名
短单品
,计数(项目\u完整\u sku)
从类别
其中现场='Y'
按短sku分组
按计数订购(完整sku)说明
;

如果要筛选出where
onsite='Y'
行,应将其移动到
where
子句中。
HAVING
子句用于筛选聚合。

另一种解决方案使用分析函数,它比TOP更通用,例如,通过添加分区,您可以获得每组前n名:

SELECT
      short_sku
    ,  Count(item_full_sku)
FROM category 
WHERE onsite = 'Y'  
GROUP BY short_sku, onsite
QUALIFY row_number() over (ORDER BY Count(full_sku) DESC) = 1

另一种解决方案是使用分析函数,它比TOP更通用,例如,通过添加分区,可以获得每组的TOP n:

SELECT
      short_sku
    ,  Count(item_full_sku)
FROM category 
WHERE onsite = 'Y'  
GROUP BY short_sku, onsite
QUALIFY row_number() over (ORDER BY Count(full_sku) DESC) = 1

非常感谢你的想法。我只是想知道为什么Limit不能使用Teradata。它曾经与MS SQL和MySQL一起工作。Thanks@WeldaSudha
limit
是专有语法,但
top
也不是标准SQL。@dnoeth谢谢,这很有意义。这可能是一个愚蠢的问题,但我不记得MySQL中的按列分组过滤器,我只按select语句中的内容分组。你有没有可能再知道一次,谢谢you@WeldaSudha较旧的MySQL版本在聚合方面比较宽松,但在当前版本中已经修复了这一问题。聚合后,
groupby
或聚合列中只有那些列(不再有单独的行,因为它们已聚合)。@dnoeth非常感谢您的帮助非常感谢您的想法。我只是想知道为什么Limit不能使用Teradata。它曾经与MS SQL和MySQL一起工作。Thanks@WeldaSudha
limit
是专有语法,但
top
也不是标准SQL。@dnoeth谢谢,这很有意义。这可能是一个愚蠢的问题,但我不记得MySQL中的按列分组过滤器,我只按select语句中的内容分组。你有没有可能再知道一次,谢谢you@WeldaSudha较旧的MySQL版本在聚合方面比较宽松,但在当前版本中已经修复了这一问题。聚合后,
groupby
或聚合列中只有那些列(不再有单独的行,因为它们已聚合)。@dnoeth非常感谢您的帮助