我想要一个将结果分组在一起的查询,除非job_num = 0的值,但我一直无法弄清楚如何去做。
这是我的查询(并且不起作用,我收到SQL错误)...
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
我尝试用job_num != 0
替换job_num IS NOT NULL
并获得相同的结果。
在我尝试排除job_num != 0
这是表格的简化版本
id | call_ref | job_num
_______________________
1 | 123445 | 2389
_______________________
2 | 342537 | 0
_______________________
3 | 876483 | 2389
_______________________
4 | 644686 | 5643
_______________________
5 | 654532 | 0
我想将job_num!= 0的行分组,但我仍然希望显示job_num = 0的行,而不是组合在一起。 call_ref不是唯一的,表格中还有31列需要值。
使用上面的示例行和ID 1和3将被分组,2,4和5仍会返回结果但不会分组。
我想要的结果......
1和3分组(因为job_nums是相同的但是!= 0) 2,4,5未分组
答案 0 :(得分:1)
如果您在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;
答案 1 :(得分:1)
你能用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);
答案 2 :(得分:0)
基于此评论:
@mcNets因为理想情况下我想用job_num显示结果 != 0,我只是不希望结果与该值组合在一起
你不想要group by
(虽然我不明白“那个值”指的是什么)。我注意到这与问题的第一句话直接矛盾。
这样做你想要的吗?
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;
编辑:
我觉得你可能只想要值为0的行一起出现而其余的一起出现。如果是这种情况,请将条件放在ORDER BY
:
SELECT SQL_CALC_FOUND_ROWS c.*
FROM calls c
WHERE c.parent_id = '$term'
ORDER BY (job_num = 0), date_start DESC
LIMIT $page_position, $item_per_page;
答案 3 :(得分:0)
试试这个
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
答案 4 :(得分:0)
您可以将派生表用于主查询,然后将FS
用于要显示多行的表。例如:
order
在此查询中,最终ord
是使行显示不止一次的LEFT JOIN
,尽管有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返回LEFT JOIN