如何將group_concat的結果再進行包含in的子查詢? 或替代方法?
補上實際例子
http://sqlfiddle.com/#!9/86d0f4/12/0
直接來個示意的例子比較快~~~
select group_concat(XXX.field1),
(
select sum(ZZZ) from OOO where field2 in (group_concat(XXX.field1))
) field2
from XXX
group XXX
目前已知因為group_concat出來的結果是一個完整的字串,放到in中要馬出錯要馬啥都找不到~
第一個想到的是做split,把字串轉成陣列~
不過網路上的split幾乎是切割後放到臨時表中,然後再要使用的地方使用select這個臨時表,這樣塞不進我的select中,想請問各位前輩們是如何解決或繞過這個問題的??
(雖然可以丟到後端語言進行二次處裡,不過如果要進行篩選查詢,就必須先整份完整數據都抓出來並運算完後才能篩選出要的結果回傳,資料量大的話怕記憶體會不夠@@,所以希望全在sql內處理掉,因為把結果的外面再包一層select用where篩掉就好)
坦白說,看不太懂題目,
而且,如同一級屠豬士所語,例子實在太差,就算想幫您寫,
也不知正確答案是什麼?無從驗證,
下回發問,最好把例子弄多筆,越多越好,越亂越佳,
並把您想要的案答,寫出來。
我是用猜的啦,您看看行否?
SELECT
a.*,
( SELECT sum( class.class_studentNbr ) FROM class WHERE class.class_schId = a.plan_schId AND class.class_depId = a.plan_depId ) AS `學生人數`
FROM
(
SELECT
plan.plan_schId,
plan.plan_depId,
plan.plan_semester,
GROUP_CONCAT( plan.plan_id ) AS plan_id,
GROUP_CONCAT( DISTINCT plan.plan_year ) AS plan_year,
GROUP_CONCAT( DISTINCT plan.plan_name ) AS `計畫名稱`,
GROUP_CONCAT( DISTINCT plan.class_id ) AS `班級(不重複)`,
SUM( plan.plan_fund ) AS `經費`
FROM
plan
GROUP BY
plan.plan_schId,
plan.plan_depId,
plan.plan_semester
) a;
不對吧..
group_concat是想要查詢的結果列印出來~
但若放在sql裡面的條件in查詢就不需要吧~
select *
from xxx
where x in(select xxx from xxx)
你其實是同樣的問題,一路下來問了三次,現在已經歪掉了.用到 group_concat,又要再拆分,這已經是做虛功了.
你有沒有發覺,你問的時候,舉的例子很差,兩個都是30,而且也不直接清楚的描述,變成真的的目標與過程中你嘗試的方法混雜在一起.
你再自己好好理一下,把Table,測試資料,與目標再好好描述.不然是很難幫你的.
select plan_schId,plan_depId,plan_semester
,group_concat(distinct plan_name) '計畫名稱'
,group_concat(distinct concat(class_grade,class_room)) '班級(不重複)'
,group_concat(distinct c1.class_id) '班級id(不重複)'
,sum(plan_fund) '經費'
,60 '正確不重複學生數'
,(
select sum(class_studentNbr) from class
where find_in_set(class_id,group_concat(distinct c1.class_id))
) '學生人數(不重複)'
from plan
inner join class c1 on plan.class_id = c1.class_id
group by plan_schId,plan_depId,plan_semester