我有查询,在某些产品的拉动有很多产品的名单将增长我怎样才能加入这个2个MySQL查询一起
SELECT pid, link, created_at FROM products ORDER BY timestamp DESC
但我也有一个包含一个pid
和rating
领域的又一表, pid
是产品表的链接。
SELECT AVG(rating) FROM ratings GROUP BY pid
我怎样才能查询,所以它会拉出如下信息?
我有查询,在某些产品的拉动有很多产品的名单将增长我怎样才能加入这个2个MySQL查询一起
SELECT pid, link, created_at FROM products ORDER BY timestamp DESC
但我也有一个包含一个pid
和rating
领域的又一表, pid
是产品表的链接。
SELECT AVG(rating) FROM ratings GROUP BY pid
我怎样才能查询,所以它会拉出如下信息?
在MySQL中,这应该给你想要的结果;
SELECT p.pid, p.link, p.created_at, AVG(r.rating) rating
FROM products p
LEFT JOIN ratings r
ON p.pid=r.pid
GROUP BY p.pid;
An SQLfiddle to test with。因为它允许你做不完整的GROUP BY
查询,所以如果你想在另一个数据库上运行它(或者可能出于文体原因),那么查询应该是相反的;但是,
SELECT p.pid, p.link, p.created_at, AVG(r.rating) rating
FROM products p
LEFT JOIN ratings r
ON p.pid=r.pid
GROUP BY p.pid, p.link, p.created_at;
在MS-SQL有可能选择这个作为:
SELECT p.pid,
p.link,
p.created_at,
(SELECT AVG(rating) FROM ratings r where r.pid = p.pid) as rating
FROM products p
ORDER BY timestamp DESC
问题是关于MySQL,而不是MSSQL。 – Barmar
http://stackoverflow.com/questions/3551312/mysql-nested-query-select-statement 这是另一个在mysql中完成的例子。 都基于SQL,这些常见的概念通常是可以转让的。 – SlitCanvas
概念是一样的。查询可能需要一些调整,但MySQL中也有[子查询](https://dev.mysql.com/doc/refman/5.0/en/subqueries.html) – SpenserJ
SELECT p.pid, link, created_at, avg_rating
FROM products p
JOIN (SELECT pid, AVG(rating) avg_rating
FROM ratings
GROUP BY pid) a
ON p.pid = a.pid
ORDER BY timestamp DESC
当我使用上面的其他职位,它总是表现出这个错误对我说:
'Unknown column "timestamp" in "order clause"'
我相信,时间戳被添加到产品表中的列created_at。所以,我已经使用了这个专栏本身的排序。它将从产品表中选取最后一行并使用它打印AVG(评级)。
SELECT products.pid, products.link, products.created_at, AVG(ratings.rating)
FROM products, ratings
WHERE products.pid = ratings.pid
GROUP BY products.pid
ORDER BY products.created_at ASC
;
该查询已经过测试,对我来说工作正常。
如果你在我的答案中使用子查询方法,你也可以避免不完整的GROUP BY。我认为它也可能更有效率,因为在加入之前分组意味着来自联结的临时表更小。 – Barmar