Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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组,除非值等于0_Mysql_Sql - Fatal编程技术网

MySQL组,除非值等于0

MySQL组,除非值等于0,mysql,sql,Mysql,Sql,我想要一个将结果分组在一起的查询,除非job_num的值=0,但我无法确定如何执行该查询 这是我目前的查询(不起作用,我得到一个SQL错误) 我已尝试替换job\u num!=0withjob_num不为NULL并获得相同的结果 在我尝试排除job_num!=0 这是该表的简化版本 id | call_ref | job_num _______________________ 1 | 123445 | 2389 _______________________ 2 | 342537

我想要一个将结果分组在一起的查询,除非job_num的值=0,但我无法确定如何执行该查询

这是我目前的查询(不起作用,我得到一个SQL错误)

我已尝试替换
job\u num!=0
with
job_num不为NULL
并获得相同的结果

在我尝试排除
job_num!=0

这是该表的简化版本

id | call_ref | job_num
_______________________

1  | 123445   | 2389
_______________________

2  | 342537   | 0
_______________________

3  | 876483   | 2389
_______________________

4  | 644686   | 5643
_______________________

5  | 654532   | 0
我想将作业_num!=0,但我仍然希望显示job_num=0未分组在一起的行。call_ref不是唯一的,表中还有31列我需要的值

使用上面的示例,ID为1和3的行将被分组,2、4和5仍将返回结果,但不会分组

结果我想

1和3分组(因为作业数量相同,但!=0)
2、4、5未分组

如果在PHP代码中使用此请求,请尝试

SELECT SQL_CALC_FOUND_ROWS FROM calls 
WHERE parent_id = \'$term\' GROUP BY IF job_num <> 0
ORDER BY date_start DESC LIMIT $page_position, $item_per_page;
从调用中选择SQL\u CALC\u FOUND\u行
其中,父项\u id=\'$term\'分组依据IF job\u num 0
订单按日期开始描述限制$page\u位置,$item\u每页;
基于此评论:


@因为理想情况下我想用job_num显示结果 != 0,我只是不希望将具有该值的结果分组在一起

您不希望按
分组(尽管我不理解“该值”指的是什么)。我确实注意到这与问题的第一句直接矛盾

这是你想要的吗

SELECT SQL_CALC_FOUND_ROWS c.*
FROM calls c
WHERE c.parent_id = '$term' AND job_num <> 0
ORDER BY date_start DESC
LIMIT $page_position, $item_per_page;

你能用UNION试试吗

(SELECT SQL_CALC_FOUND_ROWS * FROM calls 
WHERE parent_id = '$term' where job_num != 0 GROUP BY (job_num)
ORDER BY date_start DESC LIMIT $page_position, $item_per_page)
UNION
(SELECT SQL_CALC_FOUND_ROWS * FROM calls 
WHERE parent_id = '$term' where job_num = 0
ORDER BY date_start DESC LIMIT $page_position, $item_per_page);
试试这个

SELECT *
FROM
    (SELECT SQL_CALC_FOUND_ROWS *
     FROM calls
     WHERE parent_id = '$term'
         AND job_num != 0
     GROUP BY job_num
     UNION SELECT SQL_CALC_FOUND_ROWS *
     FROM calls
     WHERE parent_id = '$term'
         AND job_num = 0) AS T
ORDER BY date_start DESC LIMIT $page_position,
                               $item_per_page

您可以将派生表用于主查询,然后将其左键联接到要显示多行的表上。例如:

SELECT      *
FROM (  
    SELECT      a.account_id 'CRM ID', a.lead_status 'Status', a.account_name 'Client Name', DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL a.date_of_birth SECOND), '%d-%m-%Y') AS 'DOB', a.postcode 'Postcode',
                a.phone 'Phone #.', a.email 'Email', IFNULL(i.invoice_date, 'Never') AS 'Last Invoice'
    FROM        mydb.invoices i
    RIGHT JOIN  mydb.members m      ON      i.member_id = m.member_id
    RIGHT JOIN  mydb.accounts a     ON      m.crm_id = a.account_id
    WHERE       (i.invoice_status LIKE 'SAVE%' OR i.invoice_date IS NULL)
    AND         a.lead_status IN ('SIGNED UP', 'BILLING')
    AND         a.account_position != 'DELETED'
    GROUP BY    a.account_id
) x
LEFT JOIN   mydb.account_owners o   ON      x.`CRM ID` = o.account_id
在该查询中,最后的
左连接是使行显示多次的连接,尽管有
分组依据,例如:


旁白:忽略上面查询中的列具有“友好”名称这一事实。此查询来自一个报告工具,该工具根据SQL返回的内容显示列。
:)

提供了示例数据和所需结果。将
select*
groupby
一起使用简直是毫无意义的。为什么不把job_num!=where子句中的0?@mcNets,因为理想情况下,我希望使用job_num!显示结果0,我只是不希望将具有该值的结果分组together@GordonLinoff这个表有34列,所以可能需要一些时间…@tatty27。
select
中的所有未聚合列应位于
分组依据中。你的问题很不清楚。示例数据和所需结果将有所帮助。谢谢,但在“job_num!”附近出现语法错误0 ORDER ByThank,但它不显示job_num!=0我需要结果按job_num将结果分组,其中job_num!=0,但我仍然需要它来显示job_num=0行。我会在我的问题中解释更多。@tatty27。这将清楚地显示
job_num
不是0的行。这是在
where
子句中。是的,它是,但我想看到job_num为0的行,只是没有组合在一起。我希望将具有匹配job_num值的行分组,但job_num=0的行未分组。谢谢,但在联合后出现语法错误。感谢您的帮助:)我将进一步查看UNION选项,看看错误在哪里。@tatty27我已根据mysql文档对其进行了修改。我不会对答案投反对票。但这一个应该是,因为它正在使用
SELECT*
groupby
@GordonLinoff,因为问题中没有列的名称。
SELECT *
FROM
    (SELECT SQL_CALC_FOUND_ROWS *
     FROM calls
     WHERE parent_id = '$term'
         AND job_num != 0
     GROUP BY job_num
     UNION SELECT SQL_CALC_FOUND_ROWS *
     FROM calls
     WHERE parent_id = '$term'
         AND job_num = 0) AS T
ORDER BY date_start DESC LIMIT $page_position,
                               $item_per_page
SELECT      *
FROM (  
    SELECT      a.account_id 'CRM ID', a.lead_status 'Status', a.account_name 'Client Name', DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), INTERVAL a.date_of_birth SECOND), '%d-%m-%Y') AS 'DOB', a.postcode 'Postcode',
                a.phone 'Phone #.', a.email 'Email', IFNULL(i.invoice_date, 'Never') AS 'Last Invoice'
    FROM        mydb.invoices i
    RIGHT JOIN  mydb.members m      ON      i.member_id = m.member_id
    RIGHT JOIN  mydb.accounts a     ON      m.crm_id = a.account_id
    WHERE       (i.invoice_status LIKE 'SAVE%' OR i.invoice_date IS NULL)
    AND         a.lead_status IN ('SIGNED UP', 'BILLING')
    AND         a.account_position != 'DELETED'
    GROUP BY    a.account_id
) x
LEFT JOIN   mydb.account_owners o   ON      x.`CRM ID` = o.account_id