MYSQL选择使用左联接,计数,分组依据

时间:2020-01-19 17:01:47

标签: mysql sql group-by left-join

我有这个查询:

user

我有这些表:

id

我明白了:

实际输出

topic

我正在尝试获得以下结果:

所需的输出

title

可能出现此结果吗?也许调整我​​的查询? 我尝试不使用distinctAlias,但在那种情况下,我只得到1行,总计distinctAlias

2 个答案:

答案 0 :(得分:0)

如果要将不同的位置分隔到不同的行,则需要将该列添加到group by子句中:

SELECT c.`id`, w.`qty`, COUNT(c.`id`) AS pieces, c.`location`
FROM `control` AS c
LEFT JOIN `warehouse` AS w ON w.`id` = c.`id`
WHERE c.`code` = '40'
GROUP BY c.`id`, c.`location`
-- Here ---------^

答案 1 :(得分:0)

我怀疑您只需要在qty子句中添加locationgroup by

SELECT c.`id`, w.`qty`, COUNT(*) AS pieces, c.`location`
FROM `control` AS c
LEFT JOIN `warehouse` AS w ON w.`id` = c.`id`
WHERE c.`code` = '40'
GROUP BY c.`id`, w.`qty`, c.`location`

从MySQL 5.7开始,必须在group by子句中列出所有非聚合列(除非您更改默认的SQL选项ONLY_FULL_GROUP_BY);大多数其他数据库也实现此约束。我建议您习惯一下...

旁注:

  • COUNT(c.id)最好写成COUNT(*),因为id似乎是不可为空的列

  • 一般来说,除非绝对必要,否则应避免在表名和列名前后使用反引号。

相关问题