2

假设我有两个表 - ADDONS 和 DOWNLOADS。

ADDONS 规定哪些应用程序免费提供哪些插件。
DOWNLOADS 记录所有应用程序的插件下载,包括免费和非免费。

ADDONS  
appname  | varchar  
appaddon | varchar

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

我正在尝试编写一个查询,显示 DOWNLOADS 中每个 appaddon 的计数,其中它未免费包含在 ADDONS 中。

我得到了: "SELECT appaddon, count(id) FROM downloads GROUP BY appaddon ORDER BY count(id) DESC"- 但这包括免费包含它的应用程序和不包含它的应用程序。

谁能指出我正确的方向?


更新:

示例:假设我有两个假日主题应用程序 - 一个用于圣诞节,一个用于万圣节,每个应用程序都允许您下载应用程序中包含的服装(例如,万圣节允许您下载女巫、骷髅或南瓜灯笼,以及圣诞节让您下载圣诞老人或精灵)。但是如果有人从应用程序内升级,他们可以下载任何可用的服装(所以圣诞节升级可以下载骷髅,或者万圣节升级可以下载精灵)。

我正在尝试计算未升级的不包括在内的下载量。所以我想排除万圣节下载的女巫和圣诞节下载的圣诞老人,但要计算其他应用程序下载的女巫、骷髅、精灵等。

以下是一些示例数据:

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 Fiddle:链接

于 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 回答