这是一个表格示例:
Table: websites
Domain | Category | Popularity
google.com | 0 | 13,430
yahoo.com | 0 | 1,094
facebook.com | 1 | 23,943
youtube.com | 2 | 17,320
imdb.com | 3 | 6,094
stackoverflow.com | 4 | 2,930
ebay.com | 5 | 5,748
yandex.com | 5 | 3,748
我想通过排除按人气排序的类别CE = [C1,C2,C3 ... Cn]来返回前N个结果。
例如:
排除搜索引擎的TOP 3结果CE = [0]按受欢迎程度排序:
Domain | Category | Popularity
facebook.com | 1 | 23,943
youtube.com | 2 | 17,320
imdb.com | 3 | 6,094
通过排除除搜索引擎之外的所有类别的TOP 3结果CE = [1,2,3,4,5]按人气排序:
Domain | Category | Popularity
google.com | 0 | 13,430
yahoo.com | 0 | 1,094
让我们处理最后一个查询。
我希望它看起来像这样:
SELECT domain, category, popularity FROM (SELECT domain, category, popularity FROM websites WHERE category != [1, 2, 3, 4, 5] ORDER BY popularity) LIMIT 0, 3
我不关心响应是否按顺序排序。这是我可以重做客户端。
我知道这是核心级别的东西,但有没有办法加速它?毕竟是一张全桌扫描!
答案 0 :(得分:3)
public static void GetIDEInstances()
{
instances = new List<object>();
Hashtable runningStationInstances = new Hashtable();
Hashtable runningObjects = GetROTContent();
object expectedObj;
//runningObjects["!{5EB461D8-71CD-4E78-A360-4CE788A93063}"].GetHashCode();
IDictionaryEnumerator rotEnumerator = runningObjects.GetEnumerator();
while (rotEnumerator.MoveNext())
{
string candidateName = (string)rotEnumerator.Key;
if (string.Compare(candidateName,"!{CB6BFC97-F8E3-4fce-B68B-4D01485811A1}",true)==0)
{
viParenting = (IHandleVIParentInfo)rotEnumerator.Value;
}
}
}
将为您提供3类最受欢迎的域名,分别为1,2,3,4或5类
select *
from websites
where Category in (1, 2, 3, 4, 5)
order by Popularity desc
limit 0,3;
将为您提供3个最不受欢迎的域名,这些域名不属于1,2,3,4或5类
答案 1 :(得分:3)
您可以使用LIMIT
子句执行此操作,您只需确保WHERE
子句过滤掉您不想要的类别。试试这个:
SELECT *
FROM myTable
WHERE category NOT IN(category, list)
ORDER BY popularity DESC
LIMIT 3;
您在列表中传递的方式是找到一种方法来构建要过滤掉的类别的逗号分隔列表。有关IN
运算符的详细信息,请参阅this链接。
以下是SQL Fiddle示例,其中显示了您的示例案例。