簡體   English   中英

我如何將這2個MySQL查詢一起加入

[英]How can i join this 2 MySQL queries together

我有一些產品拉入的查詢,有很多產品,並且列表會不斷增長

SELECT pid, link, created_at FROM products ORDER BY timestamp DESC

但是我還有另一個表,其中包含一個pidrating字段,該pid是指向products表的鏈接。

SELECT AVG(rating) FROM ratings GROUP BY pid

我該如何查詢,以便它提取如下信息?

products.pid, products.link, products.created_at, AVG(ratings.rating)

在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中,這應該給出您想要的結果。

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;

要使用進行測試的SQLfiddle

附帶說明一下,MySQL是特殊的,因為它允許您執行不完整的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;
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(rating)。

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
; 

此查詢已經過測試,對我來說工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM