Разделите количество двух столбцов в SQL - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь посчитать два столбца со вторым столбцом как разные значения. Данные второго столбца могут иметь несколько значений в первом столбце. Поэтому я хотел бы посчитать 1-й столбец и отдельный счетчик второго столбца и разделить 1-й на 2-й столбец, чтобы получить 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

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Будьте осторожны, занимаясь делением. Когда у вас есть счет / счет, у вас есть целочисленная математика. Таким образом, что-то вроде 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
0 голосов
/ 05 сентября 2018

Ваша логика запроса верна, но содержит несколько опечаток:

Было бы:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...