我们说我有两张桌子 - ADDONS和DOWNLOADS。
ADDONS规定哪些应用程序免费提供哪些插件 DOWNLOADS记录来自所有应用程序的插件下载,这些应用程序是免费提供的,而不是。
ADDONS
appname | varchar
appaddon | varchar
DOWNLOADS
id | int
appaddon | varchar
appname | varchar
source | varchar
date | datetime
我正在尝试编写一个查询,显示每个appaddon在DOWNLOADS中的计数,其中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
答案 0 :(得分: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
答案 1 :(得分: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小提琴:link
答案 2 :(得分: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
Fiddler for it here