gpt4 book ai didi

MySQL select group by 子句不起作用

转载 作者:行者123 更新时间:2023-11-29 11:16:00 28 4
gpt4 key购买 nike

我正在使用

mysqli_query($con, "SELECT * FROM chat GROUP BY sender");

根据下表,我应该得到 1 行,其中我只有一个发件人,如果我是“b”,则总共有 3 行消息

table 上聊天

sender    destination   message
| a | | b | | .. |
| b | | a | | .. |
| a | | b | | |
| a | | b | | |
| b | | a | | |

我收到此错误消息

ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'chat.chat.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

最佳答案

GROUP BY 并不否认在 SELECT 子句中使用通配符 (*) 的能力,也不要求 GROUP BY 列包含在 SELECT 子句中。

这使得mkysoft的断言:

You need to use grouped column in select.

完全错误,并且对读者不负责任/严重误导

我将使用以下表结构和数据演示一些简单的查询:

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 读者的任何困惑。

关于MySQL select group by 子句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39740460/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com