Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在组中搜索并返回与搜索匹配的行_Mysql_Group By - Fatal编程技术网

Mysql 在组中搜索并返回与搜索匹配的行

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

我有一个相当复杂的查询,到处都是大量的连接。查询本身工作得很好,使用适当的按id分组以仅显示不同的值,我使用
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
子句

如果希望结果中包含所有序列号,可以在聚合阶段使用SELECT
GROUP\u CONCAT(SN1)作为all\u SN1
。更多信息请参见手册

如果要将所有三列的序列号都放在一列中,请将它们连接在一起。一种可能的方式:

SELECT COALESCE(GROUP_CONCAT(SN1) || ' ', '')
    || COALESCE(GROUP_CONCAT(SN1) || ' ', '')
    || COALESCE(GROUP_CONCAT(SN1), '')

可能会有一个尾随的sapce。如果你在乎的话,我会的。

谢谢你,这让我走上了正确的道路。不知何故,我忽略了这个函数(就像我以前使用过的那样)。。。我希望能找到精确的匹配搜索,但我希望它能起作用:)+1