【问题标题】:How to write a SQL query in Teradata that returns count of transactions by store per month?如何在 Teradata 中编写一个 SQL 查询,以每月按商店返回交易计数?
【发布时间】:2026-02-01 12:25:02
【问题描述】:

我正在尝试在 Teradata 中编写一个查询,该查询将按月返回每个商店中发生的事务数的计数。我发现的主要问题是交易日期存储为日期(显然),我想按月年对它们进行分组。以下是我对查询的尝试。

SELECT
COUNT(txn_nbr),
str_nbr,
EXTRACT(MONTH FROM txn_dt) AS txn_month, EXTRACT (YEAR FROM txn_dt) AS txn_year

FROM tbl_name

WHERE str_nbr IN (xxxx, xxxx, xxxx)
AND fill_sold_dt BETWEEN '2016-12-31' AND '2017-08-31'
GROUP BY  4,3

我收到的错误消息是“SELECT Failed. 3504: Selected non-aggregate must be part of the associated group.”请问,谁能帮助我正确编写查询?我在 SQL 方面没有那么丰富的经验,我将不胜感激。

【问题讨论】:

  • 您需要将str_nbr 添加到您的群组中。 GROUP BY 2,3,4
  • JNevill,非常感谢。这正是问题所在。查询成功了!感谢您抽出宝贵时间回复。
  • 仅供参考 - 您始终需要按 select 语句中未对其执行聚合函数的所有列进行分组。
  • 感谢您的提示。回想起来,回顾一下我收到的错误消息,这是完全有道理的。我会记住这一点。再次感谢你。这让我很开心:)

标签: sql teradata


【解决方案1】:

需要按str_nbr分组:

SELECT
COUNT(txn_nbr),
str_nbr,
EXTRACT(MONTH FROM txn_dt) AS txn_month, 
EXTRACT (YEAR FROM txn_dt) AS txn_year

FROM tbl_name

WHERE str_nbr IN (xxxx, xxxx, xxxx)
AND fill_sold_dt BETWEEN '2016-12-31' AND '2017-08-31'
GROUP BY  2,3,4

【讨论】:

    最近更新 更多