Sql 在具有复合主键的表上,选择组中每一行的值

Sql 在具有复合主键的表上,选择组中每一行的值,sql,ignite,Sql,Ignite,我使用的是Ignite 2.8.1 我有一个表T1(a,b,c),其中a和b都是主列。 我想知道每组中每个b的值 通常情况下,这很好,因为主键在功能上依赖于分组列c,但在这种情况下,Ignite返回一个错误,表示b必须是group by'a列中的一列…这不是我想要的,事实上这与不分组相同 使用可用的-您能否建议如何使用Ignite为每组生成a和b,甚至是b。它愉快地生成a,就好像它是主键中的唯一列一样。您可能只想预先计算每个组的计数,然后为每个a和b组合添加此信息: SELECT a, b, c

我使用的是Ignite 2.8.1 我有一个表
T1(a,b,c)
,其中
a
b
都是主列。 我想知道每组中每个
b
的值

通常情况下,这很好,因为主键在功能上依赖于分组列
c
,但在这种情况下,Ignite返回一个错误,表示
b
必须是
group by
'a列中的一列…这不是我想要的,事实上这与不分组相同


使用可用的-您能否建议如何使用Ignite为每组生成
a
b
,甚至是
b
。它愉快地生成
a
,就好像它是主键中的唯一列一样。

您可能只想预先计算每个组的计数,然后为每个
a
b
组合添加此信息:

SELECT a, b, c, cnt
FROM T1 
INNER JOIN (
  SELECT c, COUNT(c) as cnt 
  FROM T1 
  GROUP BY c
) counts
ON counts.c = c

我假设每个组都有多个不同的
a
-
b
组合,你如何将分组和非分组结合起来?@AlexLarionov没有,每个组中的数据都是唯一的。事实上,如果只选择了
a
,Ignite就会返回行,例如
SELECT a,count(c)FROM T1 GROUP BY c
将返回
a
,但是
a
本身不是唯一的,唯一的组合是
a
b
。为什么你不能
选择a,b,c…
那么呢?因为
选择a,b,c,count(c)…GROUP BY c
返回
“\uuuz0.c”必须在GROUP BY列表中
。也许我不清楚,
COUNT(c)x
很重要,所以如果
x=10
,我想知道组成这10个的10个
a,b
组合。就是这样,谢谢你-只是想澄清一下。这是因为
counts.c
是唯一的,所以当
T1
上的连接发生时,它总是与匹配
c
值的行连接?是的。一些RDBMS还支持窗口函数,这些函数也可以执行相同的操作,但代码较少。我不确定Ignite是否支持它们,但它看起来像是从T1中选择a、b、c、COUNT(*)(按c划分)作为COUNT。我熟悉其他SQL系统中的窗口函数,但不幸的是Ignite不支持(分区…)上的