簡體   English   中英

MySQL:平均並加入兩個查詢

[英]MySQL: Average and join two queries

我有兩個查詢:

SELECT
  s.id AS id,
  g.id AS group_id,
  g.nazwa AS group_name,
  s.nazwa AS station_name,
  s.szerokosc AS szerokosc,
  s.dlugosc AS dlugosc,
  s.95 as p95,
  s.98 as p98,
  s.Diesel as diesel,
  s.DieselTIR as dieseltir,
  s.Super98 as s98,
  s.SuperDiesel as sdiesel,
  s.LPG as lpg,
  s.ulica as ulica,
  s.kodPocztowy as kod_pocztowy,
  s.miasto as miasto,
  w.id as wojewodztwo_id,
  w.nazwa as wojewodzto_nazwa,
  k.id as kraj_id,
  k.kod as kraj_kod,
  k.nazwa as kraj_nazwa,
  s.data as date_mod,
  s.active as active
FROM stacje_main s
JOIN stacje_grups g ON (s.grupa=g.id)
JOIN wojewodztwa w ON (s.wojewodztwo=w.id)
JOIN kraje k ON  (w.kraj=k.id)
WHERE s.data > 0;

SELECT
  AVG(rr.vote) as average,
  COUNT(rr.station_id) counter
FROM stacje_ratings rr
GROUP BY rr.station_id;

在第二個查詢中,並非所有id(station_id)都存在,有時會翻倍。 將station_id與id結合在一起,並為每個id給出rate的平均值。

沒有費率時,所討論的平均值和計數器的值必須為0的問題。

當我組合這些查詢時,我只能看到具有當前station_id的該ID。 但是我想看全部。

您需要使用LEFT JOIN (請參閱MySQL JOIN語法 )。

對於聯接表中沒有匹配行的行,這將返回NULL ,因此我使用COALESCE將它們替換為0

SELECT
  s.id AS id,
  g.id AS group_id,
  -- [...]
  COALESCE( x.average, 0 ) AS average
  COALESCE( x.counter, 0 ) AS counter
FROM stacje_main s
JOIN stacje_grups g ON (s.grupa=g.id)
JOIN wojewodztwa w ON (s.wojewodztwo=w.id)
JOIN kraje k ON  (w.kraj=k.id)
LEFT JOIN (
  SELECT
    rr.station_id
    AVG(rr.vote) as avarge,
    COUNT(rr.station_id) counter
  FROM stacje_ratings rr
  GROUP BY rr.station_id
) x ON ( x.station_id = s.id )
WHERE s.data > 0;

親愛的兄弟,請根據您的需要使用左/右聯接,您已經使用了內部聯接,因此它將搜索兩個表中存在的相同記錄。

選擇* frm tbl在tbl1.id = tbl.id上加入tbl1

如果假設您的表正確,那么如果tbl1中沒有匹配的記錄,那么所有這些記錄也將被填充

左聯接的情況相同,但僅反轉表名稱...

:)

暫無
暫無

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

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