Select * From (
Select ID,
USER.NAME,
USER.DT,
DT.PARENT_ID
From USER
Join DT On USER.DT = DT.DT
) TestTable Where ALLDT_ID =
(
Select DT From ALLTANT Where USER_ID = 'KKBE' GROUP BY DT
)
這樣會找出ID 'KKBE' 所有同DT的人員
我加入GROUP BY DT 讓我結果能夠DT排序K00100跟K00100 K00200跟K00200 K00300跟K00300 K00400跟K00400 .....的聚合一起
我知道子集合order by是無效的 但為什麼GROUP BY DT 使用了一樣沒聚合呢?
對應Select DT 我使用別的資料庫排序看看數字可以 有什麼設定要給才能聚合或
一定要跟 SUM COUNT一起使用才能嗎?
出來結果如下 沒加GROUP BY DT 跟加了結果一樣
讓我結果能夠DT排序K00100跟K00100 K00200跟K00200 K00300跟K00300 K00400跟K00400 .....的聚合一起
這個應該使用ORDER BY 而非使用GROUP BY
SELECT *
FROM (
SELECT ID,
USER.NAME,
USER.DT,
DT.PARENT_ID
FROM USER
JOIN DT ON USER.DT = DT.DT
) TestTable
WHERE ALLDT_ID = ( SELECT DT
FROM ALLTANT
WHERE USER_ID = 'KKBE' )
ORDER BY TestTable.DT
在針對欄位進行「取最大、取最小、加總、平均、計數」前將資料分類,每一組資料之間各自進行彙總計算
例如:我希望最後查詢出來的所有資料,依照TestTable的DT欄位升冪排序
所以 DT = K00100 的資料會在最上面,再來是DT = K00200 的資料
詳細說明可以參考我這次在鐵人賽的兩篇文章:
第二堂:家事管理 - 認識查詢 (FROM→WHERE→SELECT→ORDER BY)
https://ithelp.ithome.com.tw/articles/10216972
第三堂:家事管理 - 分類後統計資料(GROUP BY → HAVING→SELECT、Aggregrate Function)
https://ithelp.ithome.com.tw/articles/10217605
GROUP BY一直以來都沒有所謂排序的功能,它只是幫你集合或統計處理而已。
所以不太確定你質問的問題在哪?
建議你這麼改…
Select * From (
Select ID,
USER.NAME,
USER.DT,
DT.PARENT_ID
From USER
Join DT On USER.DT = DT.DT
) TestTable Where ALLDT_ID IN
(
Select DISTINCT DT From ALLTANT Where USER_ID = 'KKBE'
)
GROUP BY DT, ID, NAME, PARENT_ID
ORDER BY DT
然後,其實我看不懂你的 "ALLDT_ID" 是什麼,也看不出來是屬於哪個 table 的。
這個查詢用了兩個子查詢,是因為 ALLTANT 上只有對 USER_ID 建 index 嗎?
為什麼不干脆 JOIN 3 個 table 就好了?
像這樣…
Select ID,
USER.NAME,
USER.DT,
DT.PARENT_ID
From USER
Join DT On USER.DT = DT.DT
JOIN ALLTANT on ALLTANT.DT = ALLDT_ID --這欄位到
WHERE ALLTANT.USER_ID = 'KKBE'
GROUP BY USER.DT, USER.ID, USER.NAME, DT.PARENT_ID
ORDER BY USER.DT
其實有完整的 schema 會比較好回答,否則也不知道這樣的查詢會不會因為 schema 不是我預期而產生奇怪的結果。