我有一個帶有多個選擇和單個聚合值的查詢,來自一個連接表,導致一個廣泛而丑陋的 GROUP BY(因為與連接表的一對多關系)。它是這樣的:
SELECT user.id, user.name, user.type, etc.
GROUP_CONCAT(car.id SEPARATOR ', ') AS cars
FROM user
INNER JOIN car ON user.id = car.userid
GROUP BY user.id, etc.
ORDER BY user.name, user.type, cars
我想消除長 GROUP BY,但如何在沒有 JOIN 的情況下獲得聚合值?有沒有辦法像子查詢一樣將值連接在一起,就像 GROUP_CONCAT 一樣?
uj5u.com熱心網友回復:
您可以聚合car然后加入user:
SELECT u.id, u.name, u.type, etc.,
c.cars
FROM user u
INNER JOIN (
SELECT userid, GROUP_CONCAT(id SEPARATOR ', ') AS cars
FROM car
GROUP BY userid
) c ON u.id = c.userid
ORDER BY u.name, u.type, c.cars;
或者使用相關的子查詢,這相當于一個LEFT連接,但性能可能更好:
SELECT u.id, u.name, u.type, etc.,
(SELECT GROUP_CONCAT(c.id SEPARATOR ', ') FROM car c WHERE u.id = c.userid) AS cars
FROM user u
ORDER BY u.name, u.type, cars;
uj5u.com熱心網友回復:
你可以這樣分組
SELECT user.id, user.name, user.type,
uc.cars
FROM (
SELECT userid, GROUP_CONCAT(id SEPARATOR ', ') AS cars
FROM car
GROUP BY userid) uc
INNER JOIN user ON user.id = uc.userid
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/315249.html
