我可以对运营商GROUP BY的结果产生影响吗?这正是将从查询结果和要离开的内容中删除的内容。例如,在我将JOIN应用于两个表之后,我得到以下结果:
first screen http://s019.radikal.ru/i602/1203/ba/016c3fcf5e4d.jpg
现在,在我追加到我的查询后
... GROUP BY firstname
我得到以下内容:
first screen http://s019.radikal.ru/i636/1203/b4/dcf6aaaebdf7.jpg
但是为什么在第二行中删除它?为什么不删除第一行?
如果我使用GROUP BY,我可以通过某种方式影响它吗?
查询(从评论中转录):
SELECT p.id, p.firstname, a.auto
FROM persons AS p INNER JOIN auto AS a ON p.id = a.person_id
SELECT p.id, p.firstname, a.auto
FROM persons AS p INNER JOIN auto AS a ON p.id = a.person_id
GROUP BY p.firstname
如何正确编写查询?
我尝试使用ORDER BY来解决我的问题。但GROUP BY必须始终在ORDER BY之前。因此,在这种情况下,它无法帮助我。
答案 0 :(得分:2)
你必须使用MySQL。
您的第一个查询必须类似于:
SELECT id, firstname, auto
FROM AnonymousTable;
您的第二个查询类似于:
SELECT id, firstname, auto
FROM AnonymousTable
GROUP BY firstname; -- Non-standard; MySQL only
在标准SQL中,如果您有GROUP BY子句,则必须在GROUP BY子句中列出select-list中的所有非聚合值(因此第二个查询在标准SQL中格式不正确)。只有MySQL允许您将SELECT-list中的非聚合值保留在GROUP BY子句之外。
使用此功能时,选择哪些值是很随意的。对于某些人(如id
列),结果是确定性的,因为对于给定的id
(在示例数据中),组中的所有行都具有相同的firstname
值。对于其他人(如auto
列),所选值是任意的。
如果您有以下数据:
id firstname auto
1 Alex BMW
1 Alex Audi
2 Jakob Opel
3 Alex Honda
对于名称id
Alex
列中显示哪个值将不再具有确定性(它可能是1或3),并且汽车的模型仍然是不确定的。
答案 1 :(得分:0)
group by是一个聚合函数(例如,与该组匹配的行数) - 所以你“丢失行”。
此网站可能会帮助您:http://www.w3schools.com/sql/sql_groupby.asp
也许你的意思是按那行排序?