[英]SQL How to Count table for each fields
我有3張桌子,它們是:
現在,我試圖計算每個課程有多少個qna。 如何進行查詢?
我嘗試這樣做:
SELECT (SELECT COUNT(qna_id) AS Expr1
FROM QnAs) AS Count
FROM QnAs AS QnAs_1 CROSS JOIN
Courses
GROUP BY Courses.courses_id
它確實會計算有多少QnA,但不是每個課程
我得到的輸出是每個課程的名稱和QnA計數編號,但是我想要的是每個課程的QnA編號
為什么不只使用GROUP BY
?
SELECT q.courses_id, COUNT(qna_id) as cnt
FROM QnAs q
GROUP BY q.courses_id;
看來您只想按課程ID匯總QNA:
select courses_id, count(*)
from qnas
group by courses_id
order by courses_id;
連同課程名稱:
select c.course_id, c.name, coalesce(q.cnt, 0) as qna_count
from courses c
left join
(
select courses_id, count(*) as cnt
from qnas
group by courses_id
) q on q.course_id = c.course_id
order by c.course_id;
在您自己的查詢中,您首先將所有QnA與所有課程交叉交叉(沒有明顯的原因),從而獲得了所有可能的組合。 因此,如果有兩門課程,每門課程都有三個QNA(總共六個QNA),則您將構造2 x 6 = 12行。
對於這些行中的每一行,請選擇QNA表中的總行數,在上面的示例中為6。 因此,您將選擇12行,全部顯示數字6。
但是,然后您按課程ID進行分組,因此在我的示例中僅以兩行結尾。 您應該在子查詢上應用聚合函數,例如MAX
或SUM
,但不要這樣做,這會使查詢無效(因為您要處理的行很多,但應將其視為單個值)。 但是,MySQL默默地應用ANY_VALUE
,因此您的查詢變為:
SELECT
ANY_VALUE( (SELECT COUNT(*) FROM QnAs) ) AS Count
FROM QnAs AS QnAs_1
CROSS JOIN Courses
GROUP BY Courses.courses_id;
我希望這種解釋可以幫助您了解聯接和聚合的工作方式。 您可能希望設置ONLY_FULL_GROUP_BY模式( https://dev.mysql.com/doc / ... ),以便讓MySQL報告語法錯誤,而不是通過應用ANY_VALUE
靜默“修復”查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.