[英]Not a single-group group function
我有一些表基本上如下:
TBL_USER
user_id - number
user_name - varchar
TBL_STUFF
stuff_id - number
stuff_user_id - number
我想查詢所有用戶信息,包括他們擁有的“東西”的數量。 我正在嘗試這樣的事情:
select user_id, user_name, count(stuff_id)
from tbl_user
left outer join tbl_stuff on stuff_user_id = user_id
where user_id = 5;
但我得到一個錯誤,上面寫着“不是單組小組的功能”
還有其他方法我應該這樣做嗎?
好吧,你錯過了小組的功能;-)
試試這個:
select user_id, user_name, count(stuff_id)
from tbl_user left outer join tbl_stuff on stuff_user_id = user_id
where user_id = 5
group by user_id, user_name;
最后一行是group by
子句,它告訴Oracle使用相同的user_id和user_name組合計算所有行。
你也可以這樣做:
select
user_id,
user_name,
(
SELECT
COUNT(*)
FROM
tbl_stuff
WHERE
stuff_user_id = tbl_user.user_id
) AS StuffCount,
from
tbl_user
where
user_id = 5;
您的一條評論聲明您不希望包含GROUP BY
子句中的所有字段。
@Arion發布了一個相關子查詢重新因子,它給出了相同的值。
以下查詢使用標准(不相關)子查詢(內聯視圖) 。 這是因為使用此內聯視圖結構通常可以執行相關子查詢等效項。 但是,因為我發現它們更容易維護。
WITH
stuff_count
AS
(
SELECT
stuff_user_id AS user_id,
COUNT(*) AS val
FROM
tbl_stuff
GROUP BY
stuff_user_id
)
SELECT
tbl_user.user_id,
tbl_user.user_name,
stuff_count.val
FROM
tbl_user
LEFT JOIN
stuff_count
ON stuff_count.user_id = tbl_user.user_id
WHERE
tbl_user.user_id = 5;
注意:生成計划時,它只運行user_id所需的子查詢, 而不是整個表;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.