1

2 つのテーブルがあります。最初のテーブルには、一意の ID とキーワードを持つ数値が含まれ、2 番目のテーブルには、一意の ID (CAMPAIGN列内) によって最初のテーブルにリンクされた数値が含まれます。最初のテーブルからそれぞれの数字を取得し、一意の ID ( CAMPAIGN) が 2 番目のテーブルに表示される回数 (つまり、各数字が関連付けられているキーワードの数) を数えたいと考えています。

         CAMPAIGNS                                   SUBSCRIBERS
----------------------------------      --------------------------------------
ID    |    NUMBER    |  KEYWORD  |      | ID    |   NUMBER     |   CAMPAIGN  |
----------------------------------      --------------------------------------
1     |  +1222222222 |   pizza   |      |  22   | 555-333-222  |     2       |
----------------------------------      --------------------------------------
2     |  +1222222222 |   burger  |      |  21   | 222-333-222  |     2       |
----------------------------------      --------------------------------------
3     |  +1444444444 |    pie    |      |  33   | 333-111-111  |     1       |
----------------------------------
4     |  +1111111111 |  chicken  |

私が必要とする結果は次のとおりです。

----------------------------------------
      NUMBER      |  KEYWORD   | COUNT |
----------------------------------------
    +1222222222   |   pizza    |   1   |
----------------------------------------
    +1222222222   |   burger   |   2   |
----------------------------------------
    +1444444444   |    pie     |   0   |
----------------------------------------
    +1111111111   |   chicken  |   0   |

私はあまり慣れていないJOINのでUNION、ドキュメントを実験して読んでいますがCOUNT、それらを実装する方法がよくわかりません。

これは私がこれまでに持っているものですが、関数を追加しようとするたびにCOUNTエラーが発生し、それを理解できません:

SELECT * FROM `campaigns` LEFT JOIN `subscribers` ON `campaigns`.id = `subscribers`.campaign;

EDIT 種類の作品の下に投稿されたクエリですが、カウントがゼロの追加のキャンペーンは除外されます

SELECT c.number,c.id,c.keyword,COUNT(s.id) AS count FROM campaigns AS c LEFT JOIN subscribers AS s ON c.id = s.campaign GROUP BY s.campaign ORDER BY c.id ASC
4

4 に答える 4

1
SELECT c.number,c.keyword,COUNT(s.campaign)  
FROM `campaigns` AS c 
LEFT JOIN `subscribers` AS s ON c.id = s.campaign 
GROUP BY c.id 
ORDER BY c.id ASC

このクエリはあなたが期待するものを提供します...

于 2012-12-30T04:18:23.517 に答える
1
SELECT c.number, c.id, c.keyword, ISNULL(s.count,0) AS count
FROM campaigns AS c
LEFT JOIN (
  SELECT Campaign, COUNT(*) AS count
  FROM Subscribers
  GROUP BY Campaign
) AS s
ON c.id = s.Campaign
ORDER BY c.id ASC
于 2012-12-31T03:47:20.333 に答える
0
SELECT campaigns.number AS number, campaigns.keyword AS keyword, COUNT( subscribers.id ) AS count
FROM  `subscribers` 
LEFT JOIN  `campaigns` ON subscribers.campaign = campaigns.id
GROUP BY campaigns.keyword

必要なものです。動作しない唯一のことは、サブスクライバーが0の「パイ」を表示することです...残念ながら、これに必要なmysqlサブ選択には興味がありません。

于 2012-12-30T04:07:17.350 に答える
0

問題の解決策として、以下の SQL クエリを実行してみてください

select c.number,keyword,(select count(id) as count from subscribers
where campaign=c.id) from  campaigns c 
于 2012-12-30T04:51:50.637 に答える