0

where/having 句で「エイリアス」列を使用する方法について質問があります。関連トピックに関する質問があることは知っています。しかし、私はウェブやstackoverfolwで検索しても解決策が見つかりません。

だから私はこの方法で助けを願っています..

次のステートメントはうまく機能します。

SELECT PHRASE,COUNT(*) AS A 
    FROM my_statistics 
    WHERE TIMESTAMP>NOW()-INTERVAL 7 DAY
    GROUP BY PHRASE ORDER BY A DESC 
    LIMIT 16;

PHRASETIMESTAMPはテーブルの列です。このコードは、過去 7 日間にユーザーが挿入した上位 16 のフレーズを選択します。列 USER も存在するので、複数のユーザーによって挿入された上位 16 のフレーズを選択するのが好きです。だから私はこれを試しました:

SELECT PHRASE,COUNT(*) AS A, COUNT(DISTINCT(USER)) AS B
    FROM my_statistics
    WHERE TIMESTAMP>NOW()-INTERVAL 7 DAY
          AND B>1
    GROUP BY PHRASE ORDER BY A DESC 
    LIMIT 16;

スタックオーバーフローに関する他の質問については、私が使用しなければならない情報が好きですHAVING

SELECT PHRASE,COUNT(*) AS A, COUNT(DISTINCT(USER)) AS B
    FROM my_statistics
    WHERE TIMESTAMP>NOW()-INTERVAL 7 DAY      
    GROUP BY PHRASE ORDER BY A DESC 
    HAVING B>1
    LIMIT 16;

しかし、これはエラーを返します:

SQL 構文にエラーがあります。5 行目の 'HAVING B>1 LIMIT 16' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

正しい構文がどのようになるのか、私にはわかりません。ここでどんな種類の助けも願っています。ありがとうございました!

4

1 に答える 1

2

ORDER BY A DESC afterHaving句を配置します。

SELECT phrase, 
       Count(*)                AS A, 
       Count(DISTINCT( user )) AS B 
FROM   my_statistics 
WHERE  timestamp > Now() - INTERVAL 7 day 
GROUP  BY phrase 
HAVING b > 1 
ORDER  BY a DESC 
LIMIT  16; 
于 2012-06-28T13:03:02.833 に答える