1

サブスクライバーの数を取得するために使用する次のコードがあります。

SELECT provider_id,subcat_id, COUNT(user_id) AS subscribers 
  FROM subscribers WHERE subcat_id=5 
    AND provider_id=provider_id 
  GROUP BY provider_id 
  ORDER BY subscribers DESC LIMIT 10 

provider_idを含む providers テーブルへの外部キーですprovider_name

provider_id の外部キー値を取得し、テーブル プロバイダーから provider_name に置き換える結果を取得するにはどうすればよいですか? 内部結合を試みましたが、うまくいきませんでした。私の選択クエリは少し複雑なので、おそらく構文エラーです。

私が今得た結果は次のとおりです。

+----------+---------+-----------+
|provder_id|subcat_id|subscribers|
+----------+---------+-----------+
|2         |5        |5          |
+----------+---------+-----------+
|4         |5        |3          |
+----------+---------+-----------+
|1         |5        |1          |
+----------+---------+-----------+

しかし、私が欲しいのは:

+----------+-------------+---------+-----------+
|provder_id|provider_name|subcat_id|subscribers|
+----------+-------------+---------+-----------+
|2         |Alex         |5        |5          |
+----------+-------------+---------+-----------+

SELECT subscribers.provider_id,subscribers.subcat_id, COUNT(user_id) AS サブスクライバー FROM サブスクライバー JOIN プロバイダー ON subscribers.provider_id=providers.provider_name WHERE subscribers.subcat_id=5 AND subscribers.provider_id=subscribers.provider_id GROUP BY subscribers.provider_id ORDER BY サブスクライバー DESCリミット 10

それはうまくいきません

で解決しました

SELECT s.provider_id,p.provider_name, s.subcat_id, COUNT(s.user_id) AS subscribers FROM subscribers s JOIN providers p ON s.provider_id=p.provider_id WHERE s.subcat_id=5 AND s.provider_id=s.provider_id GROUP BY provider_id ORDER BY サブスクライバー DESC LIMIT 10

4

3 に答える 3

1

これを試して:

SELECT
  p.provider_id,
  provider.name,
  subcat_id,
  COUNT(user_id) AS subscribers 
FROM subscribers s
JOIN provider p ON p.provider_id = s.provider.id
WHERE subcat_id = 5
GROUP BY 1, 2, 3
ORDER BY 4 DESC 
LIMIT 10

次の使用に注意してください。

  • 共通の列名を明確に区別するためのテーブルのエイリアス
  • すべての非集計列をリストする group by (現在のクエリは正しく機能しません)
于 2013-08-09T15:45:45.543 に答える
0

あなたのコードが何であるかはよくわかりませんが、あなたがする必要があるのは...テーブルAとテーブルBがあるとしましょう。Provider_idはあなたのリンクIDだと思います

    Select TableA.provder_id,
    TableB.subcat_id,
    TableA.Name,
    Count(user_id) as subscribers)
    FROM TableA
    INNER JOIN TableB
    ON TableB.provder_id = TableA.provider_id
WHERE subcat_id = 5
GROUP BY TableA.Provider_id,
TableB.Provider_id,
TableA.Name

「カウント」を使用しているため、すべてのフィールドでグループ化する必要があります

于 2013-08-09T15:41:46.950 に答える
0

これはあなたのためにトリックを行います:

SELECT provider_id,provider.name, subcat_id, COUNT(user_id) AS subscribers 
FROM subscribers 
JOIN provider ON provider_id = provider.id
WHERE subcat_id=5 
GROUP BY provider_id 
ORDER BY subscribers DESC 
LIMIT 10 
于 2013-08-09T15:43:22.870 に答える