我正在尝试从两个表格''publisher'和'magazine'中检索数据。我正在列出出版商,并希望在“杂志”栏中显示杂志行的数量。我正在使用此代码:
(
SELECT
p.id as id,
p.publisher as publisher,
p.flag as flag,
p.visits as visits,
IF(p.magazines>0,COUNT(distinct m.id),0) AS magazines
FROM publisher p, magazine m
WHERE m.publisher = p.id
GROUP BY p.publisher
)
UNION
(
SELECT
p.id as id,
p.publisher as publisher,
p.flag as flag,
p.visits as visits,
p.magazines as magazines
FROM publisher p
GROUP BY p.publisher
)
ORDER BY publisher
但我得到的结果是这样的:
ID Pub Magazines Visits 7 Pub7 1 2 7 Pub7 15 2 5 Pub5 0 4 4 Pub4 0 3 3 Pub3 2 26 2 Pub2 2 13 1 Pub1 9 18 6 Pub6 1 1
如您所见,最后一条记录显示两次,并以某种方式显示杂志的总和。我不知道SQL语法有什么问题,能以某种方式帮我解决这个问题吗? 提前谢谢。
答案 0 :(得分:0)
您应该了解GROUP BY hidden columns。为避免出现问题,请将所有列出的SELECT子句字段复制到GROUP BY中,除聚合字段外都将其复制。
SELECT
p.id as id,
p.publisher as publisher,
p.flag as flag,
sum( p.visits ) as visits,
COUNT(distinct m.id) AS magazines
FROM
publisher p left outer join
magazine m
on m.publisher = p.id
GROUP BY p.id, p.publisher, p.flag
ORDER BY publisher