我试图将两列与第二列作为不同的值。第二列数据在第一列中可以有多个值。所以我想计算第一列和第二列的不重复数,然后将第一列除以第二列即可得出o / p。现在,我们需要在第三列上对数据进行分组。
示例:
A B C
----------------
30 10 tomatoes
30 10 tomatoes
5 10 tomatoes
20 5 Potatoes
20 5 Potatoes
40 5 Potatoes
10 15 Onions
40 15 Onions
20 15 Onions
寻找可能的解决方案。
下面是一个简单的尝试。我不确定这是正确的还是应该使用分区方式。任何帮助将不胜感激。
SELECT
C,
COUNT('A') AS A,
COUNT(DISTINCT 'B') AS B,
((COUNT('A')) / COUNT(DISTINCT 'B')) AS AB
FROM
[Table]
GROUP BY
C
ORDER BY
C
答案 0 :(得分:1)
在这里进行除法要小心。当您有计数时,您将拥有整数数学。因此,类似3/2的结果将为1,而不是1.5。我对样本数据进行了一些修改,以证明我的意思。我在输出中包括了这两个计算,所以可以有所不同。
declare @Something table
(
A int
, B int
, C varchar(20)
)
insert @Something values
(30, 10, 'tomatoes')
, (30, 11, 'tomatoes')
, (5 , 10, 'tomatoes')
, (20, 5 , 'Potatoes')
, (20, 5 , 'Potatoes')
, (40, 5 , 'Potatoes')
, (10, 15, 'Onions')
, (40, 15, 'Onions')
, (20, 15, 'Onions')
select count(A)
, count(distinct B)
, count(A) / (count(distinct B) * 1.0) --multiplied by 1.0 to force division to use a decimal
, count(A) / count(distinct B) --integer math
, C
from @Something s
group by C
答案 1 :(得分:0)
您的查询逻辑是正确的,但包含一些错字:
应该是:
SELECT C, COUNT(A) AS A, COUNT(DISTINCT B) AS B,
COUNT(A) / COUNT(DISTINCT B) AS AB
FROM [Table]
GROUP BY C
ORDER BY C;
您正在传递常量值count('A')
,该常量值将不返回表中的行,而不返回列A的计数。