GROUP BY
並不否認SELECT
子句中使用通配符(*
)的能力,也沒有要求該GROUP BY
列(s)包含在SELECT
條款中。
這使得mkysoft的斷言:
您需要選擇使用分組列。
完全錯誤和不負責任/非常誤導來,讓讀者。
我將使用下面的表結構&數據表明一些簡單的查詢:
CREATE TABLE `chat` (
`sender` varchar(10) NOT NULL,
`destination` varchar(10) NOT NULL,
`message` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `chat` (`sender`, `destination`, `message`) VALUES
('a', 'b', 'm1'),
('b', 'a', 'm2'),
('a', 'b', 'm3'),
('a', 'b', 'm4'),
('b', 'a', 'm5');
使用此查詢來獲取所有行中的所有列具有獨特sender
- destination
雙:
SELECT * FROM `chat` GROUP BY `sender`,`destination`
輸出結果爲:
sender destination message
a b m1
b a m2
使用此查詢具有獨特senders
擺脫行destination
柱:
SELECT `destination` FROM `chat` GROUP BY `sender`
輸出將是:
destination
b
a
使用此查詢來獲取所有列來自所有行:
SELECT * FROM `chat`
輸出將是:
sender destination message
a b m1
b a m2
a b m3
a b m4
b a m5
使用此查詢得到所有列,三列把所有的列按升序開始sender
,然後destination
,然後message
:
SELECT `sender`,`destination`,`message` FROM `chat` ORDER BY `sender`,`destination`,`message`
輸出結果爲:
sender destination message
a b m1
a b m3
a b m4
b a m2
b a m5
使用該查詢分組值附加到一個字符串以換行符作爲「膠水」:
SELECT `sender`,`destination`,GROUP_CONCAT(`message` SEPARATOR '\n') AS `all_mess` FROM `chat` GROUP BY `sender`,`destination`
輸出將是:
sender destination all_mess
a b m1
m3
m4
b a m2
m5
你可以選擇任何您在GROUP_CONCAT()函數中的分隔符。
包裝所有列名稱和別名的反引號是可選的。
您將決定如何處理和顯示結果集。
基於對這個問題的錯誤說法,看來你是引用數據庫:chat
,表:chat
,柱:id
這是不包括在SELECT * FROM chat GROUP BY sender
您的SQL字符串或任何地方你的問題 - 由於這種不一致,我無法幫助。
如果有人想使用此示例表進行一些查詢,可以使用這個SQLFiddle Demo。
希望這會爲您和SO讀者帶來混亂。
是否要連接來自一個發件人的所有答案,而不考慮目的地?如果有數以百計的答案,或者長時間回答您的消息變量需要處理的話,該怎麼辦? – Linkan
請包括您的預期輸出。 –
您使用的是哪個版本的mysql? –