iT邦幫忙

0

SQL查詢,加入子查詢欄位顯示會員總計的訂單數量,跪求解法!!

  • 分享至 

  • xImage

請教各位高手,關於新增子查詢數量count()欄位的問題,我一共有兩個表

表1:menber_data
MID| Name
1 | 小明
2 | 小華
3 | 小美
4 | 小強

表2:order_data
OID| MID |PID
1 | 1 | 2
2 | 1 | 2
3 | 2 | 1
4 | 3 | 1

希望查詢列出 所有會員姓名與對應訂單總數量 如:
MID| 訂單數量
1 | 2
2 | 1
3 | 1
4 | 0

我下sql語法如下:
Select M.MID (select count(*) from order_data as O where O.MID=M.MID) from menber_data as M

上面語句我在W3School 測試看起來是可行的。

但我在我的主機上跑,結果資料庫就跑超久,當機了… 是資料筆數很多的關係嗎? 請問該如何解呢~ 我找資料找了好久,感恩大德

count(*) 改成 count(PID) 試試
SELECT M.MID,
COALESCE(COUNT(O.OID), 0) AS 訂單數量
FROM menber_data AS M
LEFT JOIN order_data AS O ON M.MID = O.MID
GROUP BY M.MID;
試試~~~???
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
alien663
iT邦研究生 4 級 ‧ 2024-09-05 10:20:58

看起來可行是因為資料量太少,可以先把會員的訂單總數先算好後再Join,這樣應該會快一點

select *
into #member_data
from (
    values
        (1, '小明'),
        (2, '小華'),
        (3, '小美'),
        (4, '小強')
) as T(MID, Name)

select *
into #order_data
from (
    values
        (1, 1, 2),
        (2, 1, 2),
        (3, 2, 1),
        (4, 3, 1)
) as T(OID, MID, PID)

with temp as (
    select MID, count(*) as counts
    from #order_data
    group by MID
)
select M.MID, M.Name, M.counts
from #member_data M
    inner JOIN temp T on M.MID = T.MID
0
Bochin
iT邦新手 4 級 ‧ 2024-09-05 13:34:42

你輸出只要MID沒有要姓名,那直接Group by不就好了?
Select MID, count(OID) from order_data group by MID

我想要沒有訂單的人也都條列出來,這樣寫只會顯示有訂單的會員

感恩幫忙

0
davidliu9116
iT邦研究生 2 級 ‧ 2024-10-25 17:40:00

SELECT M.MID, O.Total
FROM menber_data AS M
LEFT JOIN (
SELECT MID, COUNT(*) AS Total
FROM order_data
GROUP BY MID
) AS O ON O.MID = M.MID;

我要發表回答

立即登入回答