2014-09-02 70 views
1

enter image description here考慮到更多的領域,如果計數結果等於

我目前使用下面的查詢發現,這是最基礎的項目的「名稱」使用的「CATEGORY_ID」。

SELECT Name,category_id,COUNT(*) as count 
FROM ex.item 
where name LIKE '%living%' 
GROUP BY category_id ORDER by count DESC; 

但是我打其中的計數結果是相等的情況下

enter image description here

所以我修改我的查詢返回隨機結果:

SELECT Name,category_id,COUNT(*) as count 
FROM ex.item 
where name LIKE '%living%' 
GROUP BY category_id ORDER by count,rand() DESC LIMIT 1; 

這工作,但我想要改進查詢並刪除rand()完成以下操作:

1)考慮subcategory_id(在同一張桌子上)into,所以在上面的例子中,如果category_id 550是最普遍的category_id被使用,它有三個subategory_id列兩個800和一個900然後返回category_id 500和subcategory_id 800是最常見的結果。

2)假設我們仍然有上圖中的計數返回相同數字的場景(儘管我們包括了subategory_id),但是嘗試使用項目字段的描述(在同一個表中)來查看查詢字符串是否出現在說明字段中,以及它是否出現在說明和名稱中,以返回出現在兩者中的行作爲普遍結果。

感謝

+0

1)你上面的例子中不包含subcategory_id。請提供表格佈局和一些示例數據+預期結果。 – dognose 2014-09-02 23:15:04

+0

你可以加入嗎? – Cheruvian 2014-09-02 23:59:36

+0

@ dognose是的,因爲我沒有在現有的查詢中使用它..我想盡管使用它,更新後的表格佈局。 – Athanatos 2014-09-03 00:10:28

回答

2

1),您可以通過多個值組:

SELECT Name,category_id, subcategory_id, COUNT(*) as count 
FROM ex.item 
where name LIKE '%living%' 
GROUP BY category_id, subcategory_id ORDER by count DESC; 

2)使用CASE語句來計算得分/重量/升壓,你可以與其他因素結合起來:

SELECT Name,case when description like '%living%' then 1 else 0 end as boost, category_id,COUNT(*) as count 
FROM ex.item 
where name LIKE '%living%' 
GROUP BY category_id ORDER by count DESC; 

的東西,你並沒有問:

  • 如果這些類別的「捆綁」,爲什麼不帶他們到一個 讓你最賺錢(利潤率最高,最高的銷售比例, 等)?
  • 如果你的價值觀的開頭使用通配符時, 查詢不能在該列使用索引。看看文本搜索 函數(MySQL有一個,或者去使用類似 solr/elasticsearch/cloudsearch)。這也將有助於你的得分。