[英]How do I count two entries in one SQL Query in C#?
我的ForumPost表中有兩列: Id
和ThreadId
。
我想為特定用戶計算Id
和ThreadId
中的所有條目:
cmd = new SqlCommand();
cmd.Connection = connection;
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = @"SELECT dbo.ForumPost.ThreadId, "
+ "Id, "
+ " COUNT(ForumPost.Id)AS PostCount AND (ForumPost.ThreadId)AS
ThreadCount"
+ " FROM ForumPost "
+ " WHERE UserName = @UserName ";
cmd.Parameters.Add(new SqlParameter("@UserName", ThreadUserName));
reader = cmd.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
int postCount = Convert.ToInt16(reader["PostCount"]);
int threadCount = Convert.ToInt16(reader["ThreadCount"]);
AllPosts = postCount + threadCount;
}
}
reader.Close();
如果用戶可以具有不同的ThreadId計數和Id計數,則必須將其拆分為單獨的查詢。
SELECT COUNT(Id) as PostCount, UserName
WHERE UserName = '@UserName'
GROUP BY Id, UserName
SELECT COUNT(ThreadId) as ThreadCount, UserName
WHERE UserName = '@UserName'
GROUP BY Id, UserName
我在這里有點猜測,但是我想您希望統計用戶發表的帖子數量以及用戶參與的不同(不同)線程的數量:
SELECT
(
SELECT COUNT(Id)
FROM ForumPost
WHERE UserName = @UserName
) AS PostCount,
(
SELECT COUNT(DISTINCT ThreadId)
FROM ForumPost
WHERE UserName = @UserName
) AS ThreadCount
當您使用COUNT(Column)
,在Column
中具有非空值的每一行將計數+1。 因此,如果您SELECT COUNT(Id) as PostCount, COUNT(ThreadId) as ThreadCount
,則由於這兩個行分別計算了非null Id
和ThreadId
行數,因此很可能在兩個計數中獲得相同的數字。
您的意圖可能是想要統計用戶發布了多少個單個線程中的發布數,為此,您可以使用COUNT(DISTINCT Column)
:
cmd.CommandText = @"
SELECT COUNT(ForumPost.Id) AS PostCount
, COUNT(DISTINCT ForumPost.ThreadId) AS ThreadCount
FROM ForumPost
WHERE UserName = @UserName ";
但是,尚不清楚您的實際意圖是什么,因為您也在將它與檢索Id和ThreadId混合使用。 您可能意味着您想要每個線程中的帖子總數,該個人用戶在他發布的任何線程中的帖子總數,或者您想要一個帖子列表和總數(即兩個單獨的查詢)。 您需要解釋。
嘗試
SELECT COUNT(ForumPost.Id)AS PostCount AND (ForumPost.ThreadId)AS ThreadCount"
// + " COUNT(ForumPost.ThreadId)AS ThreadCount "
+ " FROM ForumPost "
+ " WHERE UserName = @UserName ";
您選擇的ID和ThreadID導致每個記錄都返回一條記錄,這就是為什么您得到重復計數的原因。
做就是了
從ForumPost那里選擇COUNT(*)UserName = @UserName;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.