Как подсчитать два разных столбца в T-SQL?
Я играю с StackOverflow datadump. Теперь у меня есть проблема T-SQL:
Я могу выбрать список с количеством вопросов в месяц и год с помощью:
select datepart(year, posts.creationdate) as year,
datepart(month, posts.creationdate) as month,
count(distinct posts.id) as questions
from posts
inner join posttags on posttags.postid = posts.id
inner join tags on tags.id = posttags.tagid
where posts.posttypeid = 1
group by datepart(month, posts.creationdate),
datepart(year, posts.creationdate)
order by datepart(year, posts.creationdate),
datepart(month, posts.creationdate)
Если я добавлю and tags.tagname = 'scala'
в WHERE
-row, затем я получаю число всех "scala-вопросов". Есть ли способ показать как общее количество вопросов, так и количество вопросов, содержащих определенный тег в одном и том же результирующем наборе (в разных столбцах).
Потому что, когда я добавляю and tags.tagname = 'scala'
я больше не могу видеть общее количество вопросов в месяц.
Есть идеи о том, как я могу объединить эти наборы результатов в один?
Ответы - Как подсчитать два разных столбца в T-SQL? / How to count two different columns in T-SQL?

30.07.2011 05:31:30
Для этого вам понадобятся два запроса, поскольку у вас есть два набора данных (Вопросы по месяцам и вопросы scala по месяцам). Одним из возможных решений является использование общих табличных выражений для создания двух "временных представлений" данных. В качестве примера:
with total as (
select datepart(year, posts.creationdate) as year,
datepart(month, posts.creationdate) as month,
count(distinct posts.id) as questions
from posts
inner join posttags on posttags.postid = posts.id
inner join tags on tags.id = posttags.tagid
where posts.posttypeid = 1
group by datepart(month, posts.creationdate), datepart(year, posts.creationdate)
), scala as (
select datepart(year, posts.creationdate) as year,
datepart(month, posts.creationdate) as month,
count(distinct posts.id) as questions
from posts
inner join posttags on posttags.postid = posts.id
inner join tags on tags.id = posttags.tagid
where posts.posttypeid = 1 and tags.tagname = 'scala'
group by datepart(month, posts.creationdate), datepart(year, posts.creationdate)
)
select total.year, total.month, total.questions as total_questions, scala.questions as scala_questions
from total
join scala on total.year = scala.year and total.month = scala.month
order by total.year, total.month
Результаты которого можно посмотреть здесь .

30.07.2011 06:42:00
Если вы используете left outer join
против posttags
, count(posttags.tagid)
будет считать только ненулевые значения. И поскольку левое внешнее соединение содержит только scala
в distinct
.
count(distinct posts.id)
Попробуйте здесь: http://data.stackexchange.com/stackoverflow/q/107948/


3143
, поэтому соединение могло быть написано с использованием 3143
вместо того, чтобы иметь подзапрос для возврата значения. data.stackexchange.com/stackoverflow/q/107949
