Sql 在一个查询中结合两个计数和联接
好的,希望有人能帮助我,因为我在这里挣扎。已尝试使用sum(case-when)、count(*)子查询,但未成功。 本质上,我有两个查询,我正试图组合成一个,由相同的参数分组。查询: 问题1:Sql 在一个查询中结合两个计数和联接,sql,sql-server,join,count,case-when,Sql,Sql Server,Join,Count,Case When,好的,希望有人能帮助我,因为我在这里挣扎。已尝试使用sum(case-when)、count(*)子查询,但未成功。 本质上,我有两个查询,我正试图组合成一个,由相同的参数分组。查询: 问题1: SELECT u.username, count(*) as 'Total' FROM log1 L1 JOIN users u on u.userref = L1.userref WHERE L1.date between @FromDate and @ToDate GROUP BY u.usern
SELECT
u.username,
count(*) as 'Total'
FROM log1 L1
JOIN users u on u.userref = L1.userref
WHERE L1.date between @FromDate and @ToDate
GROUP BY u.username
ORDER BY u.username
问题2:
SELECT
u.username,
count(*) as 'Total'
FROM log2 L2
LEFT JOIN users u on u.userref = L2.userref
WHERE L2.date between @FromDate and @ToDate and L2.message like '%None%'
GROUP BY u.username
ORDER BY u.username
我想要的是一个带有用户名列(u.username)的单个查询,一个列显示查询1的结果,一个列显示查询2的结果。感谢您的帮助 您可以在count函数中放入case语句,以仅在满足某些条件时进行计数:
SELECT u.username,
Total = COUNT(*),
Total2 = COUNT(CASE WHEN L.message LIKE '%None%' THEN 1 END)
FROM log1 AS L
JOIN users AS u
ON u.userref = L.userref
WHERE L.date BETWEEN @FromDate and @ToDate
GROUP BY u.username
ORDER BY u.username;
值得注意的是:
SELECT u.username,
Total = COUNT(Count1),
Total2 = COUNT(Count2)
FROM ( SELECT l.UserRef, Count1 = 1, Count2 = NULL
FROM log1 AS L
WHERE L.date BETWEEN @FromDate and @ToDate
UNION ALL
SELECT l.UserRef, Count1 = NULL, Count2 = 1
FROM log2 AS L
WHERE L.date BETWEEN @FromDate and @ToDate
AND L.message LIKE '%None%'
) AS l
JOIN users AS u
ON u.userref = L.userref
GROUP BY u.username
ORDER BY u.username;
您可以在count函数中放置case语句,以仅在满足某些条件时计数:
SELECT u.username,
Total = COUNT(*),
Total2 = COUNT(CASE WHEN L.message LIKE '%None%' THEN 1 END)
FROM log1 AS L
JOIN users AS u
ON u.userref = L.userref
WHERE L.date BETWEEN @FromDate and @ToDate
GROUP BY u.username
ORDER BY u.username;
值得注意的是:
SELECT u.username,
Total = COUNT(Count1),
Total2 = COUNT(Count2)
FROM ( SELECT l.UserRef, Count1 = 1, Count2 = NULL
FROM log1 AS L
WHERE L.date BETWEEN @FromDate and @ToDate
UNION ALL
SELECT l.UserRef, Count1 = NULL, Count2 = 1
FROM log2 AS L
WHERE L.date BETWEEN @FromDate and @ToDate
AND L.message LIKE '%None%'
) AS l
JOIN users AS u
ON u.userref = L.userref
GROUP BY u.username
ORDER BY u.username;
我应该将log2的连接放在哪里?抱歉,没有注意到它们是不同的表。我添加了另一个解决方案。我将log2的联接放在哪里?抱歉,没有注意到它们是不同的表。我添加了另一个解决方案。找到了缺少的逗号,但现在它与上一个不一样line@mato你说它不像最后一行是什么意思?这是一个非常有用的查询。。。不确定这是否是问题的最佳答案:)找到了缺少的逗号,但现在它不喜欢最后一个line@mato你说它不像最后一行是什么意思?这是一个非常有用的查询。。。但不确定这是否是该问题的最佳答案:)