2016-04-29 14 views
0

テーブルがあります。ReadingListは、いくつかの列で構成されています。簡略化のため、それらを呼び出すことができます:mySQL - 異なるユーザーの同じ値を持つインスタンスの数を数えます。

reading_idがちょうどAIキーです

  • link_id_fk
  • user_id_fkをreading_id。 link_id_fkは私が何をしようとしている

    (各user_id_fk用)を複数回存在することができ、ほとんどのユーザーによって保存されているトップ10link_id_fk値を、見つけることです。ここで

    はそれで私のゴミの試みがある(私は145が私はわからないんだけどこれは、返さ取得する場所そのその数を取得 - が、その確かではない数が、私は:)期待していた)

    SELECT 
        *, 
        (SELECT COUNT(*) 
        FROM ReadingList 
        WHERE link_id_fk = ReadingList.link_id_fk) AS total_saves 
    FROM 
        ReadingList 
    WHERE 
        user_id_fk IN ('test123', 'test2') AND 
        link_id_fk > 0 AND deleted = 0; 
    

    望ましい出力例は次のようになります。

    link_id_fk total_saves 
    12   3 
    34   2 
    56   1 
    78   1 
    

    誰かが正しい方向に向いていますか?

    ありがとうございます!

  • +0

    @Strawberry - DDL? –

    +0

    好きな場合は、この簡単な2ステップのアクション・コースに従ってください。1.まだ実行していない場合は、問題をより簡単に複製できるように、適切なCREATEおよびINSERTステートメント(および/またはsqlfiddle)を提供してください。 2.まだ実行していない場合は、手順1で提供された情報に対応する望ましい結果セットを提供します。明らかに、このコンテキストでは、問題を「トップ5」に単純化すると役立ちます。 – Strawberry

    答えて

    1

    あなたはサブクエリでGROUP BYを使用することができます。

    SELECT rl2.link_id_fk, rl2.nb_link 
    FROM (
        SELECT link_id_fk, count(*) as nb_link 
        FROM ReadingList 
        WHERE 
        user_id_fk IN ('test123','test2') 
        AND link_id_fk > 0 
        AND deleted = 0 
        GROUP BY link_id_fk 
    ) as rl2 
    ORDER BY rl2.nb_link DESC 
    LIMIT 10; 
    
    +0

    ありがとうございます - それは魅力のように動作します:) –

    +0

    なぜサブクエリが必要ですか?そのクエリに 'ORDER BY'と' LIMIT'を置くことができます。 – Barmar

    +0

    @Barmar not quite ...少なくとも古いバージョンでは、 'ORDER BY' /' LIMIT'が 'GROUP BY'の前にトリガされるので、この種のクエリではこれに頼ることはできません。 – Preuk

    関連する問題