Cle*_*ric 5 mysql group-concat
我正在做一个相当大的SQL所以我道歉,不能提供我的表的更大的例子.
SELECT
customer_id,
agreement_id,
if( 'network' IN ( GROUP_CONCAT( DISTINCT services.service_code
SEPARATOR ',' ) ),
'Yes','No') as networkservice
FROM customers
INNER JOIN agreement USING(customer_id)
INNER JOIN services USING(agreement_id)
GROUP BY customer_id
Run Code Online (Sandbox Code Playgroud)
客户可以签订协议,协议可以提供很多服务.我想要弄清楚的是,"网络"是否是该协议中的服务之一.
由于GROUP_CONCAT返回逗号分隔列表,因此对我的情况来说感觉很完美.但我无法让它工作,我的想法已经不多了.
如果只有一个服务并且该服务是'network'则返回yes,但是如果有多个服务则返回No.
如果我使用(INT)service_id而不是没有区别,除非INT Im正在寻找列表中的第一个.但那仅适用于INT,如果'network'在列表中排在第一位,则返回No.
我试过了:
if( 'network' IN ( CAST(GROUP_CONCAT( DISTINCT services.service_code
SEPARATOR ' ' ) AS CHAR) ),
'Yes','No')
Run Code Online (Sandbox Code Playgroud)
和
if( 'network' IN ( concat('\'',
GROUP_CONCAT(DISTINCT services.service_code
SEPARATOR '\', \'' ),
'\'') ), 'Yes','No')
Run Code Online (Sandbox Code Playgroud)
如果我的解释听起来很混乱,我可以提供更多的例子.
谢谢.
我是一个大风扇的group_concat,但你不需要group_concat在这种情况下,
sum( if(services.service_code='network', 1, 0) ) as networkservice
Run Code Online (Sandbox Code Playgroud)
小智 6
该GROUP_CONCAT函数返回一个字符串,因此您可以使用FIND_IN_SET. 它需要一个逗号分隔的字符串作为第二个参数。
IF( FIND_IN_SET ('network', GROUP_CONCAT( DISTINCT services.service_code SEPARATOR ',' ) ), 'Yes','No') as networkservice
Run Code Online (Sandbox Code Playgroud)