2

ADDONS と DOWNLOADS という 2 つのテーブルがあるとします。

アドオンは、どのアプリにどのアドオンが無料で付属しているかを決定します。
DOWNLOADS は、すべてのアプリからのアドオンのダウンロードをログに記録します。

ADDONS  
appname  | varchar  
appaddon | varchar

DOWNLOADS  
id       | int  
appaddon | varchar  
appname  | varchar  
source   | varchar  
date     | datetime  

ADDONS に無料で含まれていなかった DOWNLOADS の各 appaddon の数を表示するクエリを作成しようとしています。

私は次のようになりました: "SELECT appaddon, count(id) FROM downloads GROUP BY appaddon ORDER BY count(id) DESC"-しかし、それは無料で含まれているアプリと含まれていないアプリを含みます。

誰かがこれについて正しい方向に私を向けることができますか?


アップデート:

例: 休日をテーマにした 2 つのアプリがあるとします。1 つはクリスマス用、もう 1 つはハロウィーン用で、各アプリではアプリに含まれているコスチュームをダウンロードできます (たとえば、ハロウィーンでは魔女、骸骨、またはジャック オー ランタンをダウンロードでき、クリスマスにはクリスマス用です)。サンタやエルフをダウンロードできます)。しかし、誰かがアプリ内からアップグレードすると、利用可能なコスチュームをダウンロードできます (したがって、クリスマスにアップグレードするとスケルトンをダウンロードしたり、ハロウィーンにアップグレードするとエルフをダウンロードしたりできます)。

アップグレードせずに含まれていないダウンロードの数を取得しようとしています。したがって、ハロウィーンでダウンロードされた魔女とクリスマスでダウンロードされたサンタを除外し、その他のアプリでダウンロードされた魔女、スケルトン、エルフなどの数を取得したいと考えています。

以下にデータの例を示します。

ADDONS  
appname     | appaddon  
========================  
halloween   | jackolantern  
halloween   | skeleton  
halloween   | witch  
christmas   | santa  
christmas   | elf  
christmas   | reindeer  
easter      | bunny  
allholidays | bunny

DOWNLOADS  
id | appaddon  | appname   | date  
=======================================
1  | skeleton  | halloween | 2012-10-15  
2  | skeleton  | halloween | 2012-10-15  
3  | witch     | halloween | 2012-10-16  
4  | santa     | christmas | 2012-10-16  
5  | elf       | christmas | 2012-10-16  
6  | witch     | christmas | 2012-10-16  
7  | bunny     | christmas | 2012-10-16  
8  | bunny     | halloween | 2012-10-17  
9  | bunny     | easter    | 2012-10-18

上記に基づいて、私は結果を期待します:

appaddon  | count
=================
bunny     | 2
witch     | 1
4

3 に答える 3

3
 SELECT appaddon, count(id) FROM downloads 
    left join addons on addons.appname=downloads.appname
    where addons.appname is null
    GROUP BY downloads.appaddon ORDER BY count(id) DESC
于 2012-11-01T06:17:55.840 に答える
2

これはあなたのために働くかもしれません:

SELECT DOWNLOADS.appaddon, COUNT(*) FROM DOWNLOADS
    INNER JOIN ADDONS ON (DOWNLOADS.appaddon = ADDONS.appaddon)
    WHERE DOWNLOADS.appname != ADDONS.appname
    GROUP BY DOWNLOADS.appaddon;

これがそのためのSQLフィドルです:リンク

于 2012-11-02T23:05:54.943 に答える
1

私はそれを理解したと思います!WHERE NOT EXISTS を使用する必要がありました。

SELECT appaddon, count(id) FROM DOWNLOADS
WHERE NOT EXISTS (
  SELECT appaddon FROM ADDONS
  WHERE DOWNLOADS.appname = ADDONS.appname
  AND DOWNLOADS.appaddon = ADDONS.appaddon)
GROUP BY appaddon

ここのフィドラー

于 2012-11-03T05:24:38.057 に答える