#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;