0

特定の item_id にゼロ以外の値が 2 つ以上存在する場合にのみ、値の AVG を計算したいと考えています。ゼロ以外の値が 2 つ以上存在しない場合、AVG を計算したくありません。

現在のSQLは以下です。おそらく最初に if 節があるべきでしょうか? ... 何かアイデアはありますか?

SELECT AVG( days_since ) AS days_out
  FROM (
    SELECT days_since
    FROM user_123
    WHERE item_id = 645
AND days_since <> 0
ORDER BY id DESC
    LIMIT 5
  ) AS recent 

If 句が機能するようです。

IF SELECT COUNT (*), item_id, days_since >= 2 
where days_since <>0, then perform AVG...
4

1 に答える 1

2

どうですか:

SELECT AVG(days_since) AS days_out
  FROM User_123
 WHERE Item_ID = 645
   AND Days_Since <> 0
HAVING COUNT(*) > 1

ORDER BY句とLIMIT句が何のためにあるのかわからないので、それらによって暗示される条件を再課するために答えを適応させる必要があります。


OrderByとLimitを再適用しながら機能し続ける方法。これらは、最新の5つのエントリのみが平均計算で使用されるように使用されます。

SELECT AVG(days_since) AS days_out
  FROM (SELECT days_since
          FROM User_123
         WHERE Item_ID = 645
           AND Days_Since <> 0
         ORDER BY ID DESC
         LIMIT 5
       ) AS u
HAVING COUNT(*) > 1;
于 2012-07-01T16:52:40.093 に答える