Mysql Group BY with if语句

Mysql Group BY with if语句,mysql,if-statement,group-by,Mysql,If Statement,Group By,我不确定您是否可以在单个select语句中执行此操作,而无需嵌套select 我正在对结果进行分组,我想知道整个分组中的字段是否包含条件,显示是。这样,它只需从组中取出第一行并检查条件,而不是组中的所有行 if(field = 'condition','yes','no') as field_found 示例表:id、分数 SELECT t1.id, ( SELECT IF("10" IN ( SELECT score FROM table t2 WHERE t1.id = t2.

我不确定您是否可以在单个select语句中执行此操作,而无需嵌套select

我正在对结果进行分组,我想知道整个分组中的字段是否包含条件,显示是。这样,它只需从组中取出第一行并检查条件,而不是组中的所有行

if(field = 'condition','yes','no') as field_found

示例表:id、分数

SELECT t1.id, (
  SELECT IF("10" IN (
    SELECT score FROM table t2 WHERE t1.id = t2.id
  ),'yes','no')) 
FROM table t1
GROUP BY t1.id

这行吗?

因为您已经在执行分组依据,所以应该能够添加一个MAX()作为一列,该列具有您期望的条件,并且只需将其添加到组中即可。。。比如

if(GROUP_CONCAT(field) LIKE '%condition%','yes','no')

SELECT first_name,last_name, CONCAT(physical_address," ",physical_address2," ",city, " ",zip) as address, MONTHNAME(install_date) as billing_month, IFNULL(status.quantity,0) as total_measures_instalclient2d,IFNULL(client1_measures,"") as client1_measures,IFNULL(client2_measures,"") as client2_measures,IFNULL(client1_quantity,0) as client1_quantity,IFNULL(client2_quantity,0) as client2_quantity,if(GROUP_CONCAT(measure_list.measure_type) LIKE '%Outreach/ Assessment%','yes','no') as outreach_invoiced,GROUP_CONCAT(IF(client='Client1',CONCAT(percent*100,"%-",measure_list.measure_type),NULL)) as client1_percent,GROUP_CONCAT(IF(client='Client2',CONCAT(percent*100,"%-",measure_list.measure_type),NULL)) as client2_percent,work_order.notes FROM customers
INNER JOIN measure on measure.customer_id = customers.customer_id
INNER JOIN measure_list on measure_list.measure_list_id = measure.measure_list_id
INNER JOIN work_order on work_order.work_order_id = measure.work_order_id
INNER JOIN billing on billing.workmanship = work_order.workmanship AND billing.measure_type = measure_list.measure_type
LEFT JOIN (
SELECT customers.customer_id,SUM(quantity) as quantity,GROUP_CONCAT(IF(client='Client1',measure_description,NULL)) as client1_measures,GROUP_CONCAT(IF(client='client2',measure_description,NULL)) as client2_measures,SUM(IF(client='client1',quantity,0)) as client1_quantity,SUM(IF(client='client2',quantity,0)) as client2_quantity FROM customers
INNER JOIN measure on measure.customer_id = customers.customer_id
INNER JOIN measure_list on measure_list.measure_list_id = measure.measure_list_id
INNER JOIN work_order on work_order.work_order_id = measure.work_order_id
INNER JOIN billing on billing.workmanship = work_order.workmanship AND billing.measure_type = measure_list.measure_type
WHERE measure_list.measure_type NOT IN ('measure1','measure2')
GROUP BY customers.customer_id
) as status on status.customer_id = customers.customer_id
WHERE measure_list.measure_type IN ('measure1','measure2')
GROUP BY customers.customer_id
select 
      MAX( if( field LIKE '%condition%','1', '2' )) as ExtraOrderBy,
      First_Name,
      Last_Name,
      ... rest of query ...
   group by
      customers.Customer_ID
   order by
      1

在本例中,order by是SQL列表中的序号列,而不是显式地重新键入MAX(IF())条件。。。因此,如果条件为真,则将其标记为“1”,否则“2”将浮动所有符合列表顶部条件的项。。。然后,您可以按其他内容(如姓氏、名字或您查询过的其他字段)进行子排序。

您可以发布您正在处理的查询吗?解决方法:如果(组CONCAT(字段)如“%condition%”、“yes%”、“no”),我很高兴您解决了这个问题。请将您的解决方案作为答案发布,并标记为已接受。这将从未答复列表中删除您的问题。谢谢没有足够高的rep,这应该可以工作,但我尝试不嵌套selects,因为用于查找条件的查询已经有4个内部联接。。。所以每个嵌套选择将有4个内部连接,我有6个条件,我正在检查其中的6个条件,每个条件有4个内部连接,等等!