SQL выбирает данные, сгруппированные по attr1 с разными критериями для attr2 и attr3

#sql #ms-access #group-by #count

#sql #ms-access #группировать по #количество

Вопрос:

У меня есть таблица с такими данными в Access:

 attr1 attr2 attr3
A     1     Yes
B     8     Yes
B     6     No
C     4     No
D     5     Yes
D     2     Yes
 

Мне нужен результат, сгруппированный по attr1, подсчет attr2 и подсчет attr3, только если значение равно «Да»:

 attr1 attr2 attr3
A     1     1
B     2     1
C     1     0
D     2     2
 

Я был бы признателен за любую помощь с sql.
Заранее большое вам спасибо.

Ответ №1:

Выражение для третьего столбца здесь является проблемой.

Рассмотрим IIf выражение: IIf(m.attr3='Yes', 1, 0)

Это выражение вернет 1, если поле содержит «Да», и 0 в противном случае.

Поэтому используйте это выражение в Sum() функции в вашем запросе. Этот запрос возвращает то, что вы запросили из ваших выборочных данных.

 SELECT
    m.attr1,
    Count(m.attr2) AS CountOfattr2,
    Sum(IIf(m.attr3='Yes', 1, 0)) AS SumOfYes
FROM tblMario AS m
GROUP BY m.attr1;
 

Комментарии:

1. Большое вам спасибо за sql и объяснение. Это работает!

Ответ №2:

Это должно сработать:

 SELECT attr1, Count(attr2), Sum(iif(attr3 = "Yes",1,0)) FROM MyTable GROUP BY attr1 ; 
 

Google ‘SQL GROUP BY’ и ‘SQL Aggregate functions’ для получения дополнительной информации

Комментарии:

1. Спасибо. У меня возникли проблемы с этим количеством деталей (attr3 = «Yes») — это плохо работает (по крайней мере, не в Access. Он учитывает все, а не только строки с «Да». Это дает тот же результат, что и столбец attr2

2. Исправлено. Как говорит ХансУп, вместо этого используйте сумму iif

Ответ №3:

Можно сделать без IIF, в Access TRUE/ Yes равно -1, так -1* attr3 что.

 SELECT
    m.attr1,
    Count(m.attr2) AS CountOfattr2,
    Sum(-1* attr3)  AS SumOfYes
   
FROM tblMario AS m
GROUP BY m.attr1;