这是我的查询
SELECT
COALESCE(js.name,'Lead saknas'),
count(j.id)
FROM
jobs j
LEFT JOIN
job_sources js
ON j.job_source=js.id
LEFT JOIN
(SELECT
*
FROM
quotes
GROUP BY
job_id) q
ON j.id=q.job_id
GROUP BY
j.job_source
问题在于每个作业允许有多个引号。因为我按照job_id对引号进行分组。现在肯定,这很有效。但我不喜欢子查询的解决方案。如何将子句从子查询分解为主查询?我已经尝试将q.job_id添加到主组子句中,无论是在现有的子句之前还是之后,都没有得到相同的结果。
答案 0 :(得分:0)
子查询中的GROUP BY将给定job_id的引号中的所有结果限制为1(如果只执行'SELECT *',MySQL将仅为每个不同的分组返回1个结果,即使有多个行具有该分组),所以你将job_sources上的作业连接到一个表上,每个job_id的引号只有一行。
当GROUP BY在主查询中时会发生什么,它将加入3个表,然后为每个job_id选择其中一个。
由于MySQL可以返回多行中的任意一行,显然你不能指望结果在每种情况下都是相同的。
如果你要使用组函数,它应返回相同的结果(尝试类似SELECT COUNT(*),GROUP_CONCAT(quote_id)FROM quotes)。
MS SQL不允许您在执行GROUP BY时执行'SELECT *'(除非您对所有字段进行GROUP BY,这是毫无意义的),因为它可以为不同的查询返回不同的结果。允许在MySQL中执行此操作意味着您应该知道自己在做什么。
更具体地说,MS SQL不允许您选择未分组的字段,除非您对它们使用分组功能。
答案 1 :(得分:0)
我正在寻找一个简单的group by
,我想:
SELECT COALESCE(js.name,'Lead saknas'), count(j.id)
FROM jobs j LEFT JOIN
job_sources js
ON j.job_source=js.id
GROUP BY COALESCE(js.name,'Lead saknas')