Mysql 在组中搜索并返回与搜索匹配的行
我有一个相当复杂的查询,到处都是大量的连接。查询本身工作得很好,使用适当的按id分组以仅显示不同的值,我使用Mysql 在组中搜索并返回与搜索匹配的行,mysql,group-by,Mysql,Group By,我有一个相当复杂的查询,到处都是大量的连接。查询本身工作得很好,使用适当的按id分组以仅显示不同的值,我使用groupby来解释COUNT()字段,我有3个包含序列号的字段 问题是,假设有3行共享相同的id。这三行中的每一行在三个序列号列中都有不同的序列号,如下所示: Row ID SN1 SN2 SN3 1 1 abc123 (null) (null) 2 1 (null) def456 (null) 3
groupby
来解释COUNT()
字段,我有3个包含序列号的字段
问题是,假设有3行共享相同的id。这三行中的每一行在三个序列号列中都有不同的序列号,如下所示:
Row ID SN1 SN2 SN3
1 1 abc123 (null) (null)
2 1 (null) def456 (null)
3 1 (null) (null) xyz789
按ID分组时,第一行将出现在记录集中,这很好,但也意味着如果我执行类似“%def%”的,该行将根本不会出现
MySQL是先执行WHERE部分还是先执行GROUP BY?它似乎是先分组的,这就是为什么只有像“%abc%”这样的才能工作的原因。有没有办法交换订单
真正的查询是60行,所以我并不真的想粘贴它,但如果绝对必要,我会粘贴它。其中在分组依据之前应用了
如果要先筛选,然后分组,请使用WHERE
条件。
如果要先按分组,然后进行筛选,请使用HAVING
子句
如果希望结果中包含所有序列号,可以在聚合阶段使用SELECTGROUP\u CONCAT(SN1)作为all\u SN1
。更多信息请参见手册
如果要将所有三列的序列号都放在一列中,请将它们连接在一起。一种可能的方式:
SELECT COALESCE(GROUP_CONCAT(SN1) || ' ', '')
|| COALESCE(GROUP_CONCAT(SN1) || ' ', '')
|| COALESCE(GROUP_CONCAT(SN1), '')
可能会有一个尾随的sapce。如果你在乎的话,我会的。谢谢你,这让我走上了正确的道路。不知何故,我忽略了这个函数(就像我以前使用过的那样)。。。我希望能找到精确的匹配搜索,但我希望它能起作用:)+1