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? –