Sql 在具有复合主键的表上,选择组中每一行的值
我使用的是Ignite 2.8.1 我有一个表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
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不支持(分区…)上的。