我試圖計算一列中的所有值,然後將此數乘以不同表中的值。到目前爲止,我有:在不同的表中乘以列中值的總數
SELECT CLUB_FEE * COUNT(MEMBER_ID) AS VALUE
FROM CLUB, SUBSCRIPTION
WHERE CLUB_ID = 'CLUB1';
這不工作,但任何人都可以請幫忙嗎?
我也需要幫助爲多個俱樂部做這個。是否可以在所有俱樂部的一個聲明中完成這一切,然後獲得平均水平?
我試圖計算一列中的所有值,然後將此數乘以不同表中的值。到目前爲止,我有:在不同的表中乘以列中值的總數
SELECT CLUB_FEE * COUNT(MEMBER_ID) AS VALUE
FROM CLUB, SUBSCRIPTION
WHERE CLUB_ID = 'CLUB1';
這不工作,但任何人都可以請幫忙嗎?
我也需要幫助爲多個俱樂部做這個。是否可以在所有俱樂部的一個聲明中完成這一切,然後獲得平均水平?
想必,你打算是這樣的:
SELECT MAX(c.CLUB_FEE) * COUNT(MEMBER_ID) AS VALUE
FROM CLUB c JOIN
SUBSCRIPTION s
ON c.CLUB_ID = s.CLUB_ID
WHERE c.CLUB_ID = 'CLUB1';
你也可以寫爲:
SELECT SUM(c.CLUB_FEE) AS VALUE
FROM CLUB c JOIN
SUBSCRIPTION s
ON c.CLUB_ID = s.CLUB_ID
WHERE c.CLUB_ID = 'CLUB1';
我認爲第一個版本會更清晰,因爲OP指定COUNT()
的問題。
如果你想爲有用戶所有的俱樂部:
SELECT SUM(c.CLUB_FEE) AS VALUE
FROM CLUB c JOIN
SUBSCRIPTION s
ON c.CLUB_ID = s.CLUB_ID
GROUP BY c.CLUB_ID;
從檢查解釋計劃,似乎以下版本可能會多一點有效的(因爲它避免了一起,只使用一個聚集)。如果你同時需要所有俱樂部的話,那麼可能所有的解決方案都會有相同的「優化者成本」(他們都會在某個時候加入)。
select club_fee * (select count(member_id) from subscription where club_id = 'CLUB1')
from club
where club_id = 'CLUB1'
所以,現在唯一的聚集函數推入子查詢,其餘並不需要或者加入或其他聚合函數。
當然,這隻在性能很重要時才重要;它可能不是。
請添加示例數據和預期輸出 –
編輯您的問題並提供樣本數據和期望的結果。 –
[踢壞的習慣:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins。 aspx) - 在ANSI - ** 92 ** SQL標準(**超過20年前的**)中,舊式*逗號分隔的表*樣式列表被替換爲* proper * ANSI'JOIN'語法並且不鼓勵使用它 –