2014-11-13 4 views
0

Я долгое время ломал себе голову на этом, так что через некоторое время потребовалось некоторое время.Справка по запросу SQL Server - Связанные с этим hashtags

У меня есть база данных продуктов, каждый продукт имеет несколько связанных с ним хэштегов. Я хочу, чтобы вытащить связанные хэштеги.

Позвольте мне вас через пример:

CREATE TABLE #Test (ProductID int, Hashtag varchar(30)) 

INSERT INTO #Test VALUES( 1 ,'toys') 
INSERT INTO #Test VALUES( 1 ,'lego') 
INSERT INTO #Test VALUES( 1 ,'construction') 

INSERT INTO #Test VALUES( 2 ,'toys') 
INSERT INTO #Test VALUES( 2 ,'lego') 
INSERT INTO #Test VALUES( 2 ,'lego-city') 

INSERT INTO #Test VALUES( 3 ,'clothing') 
INSERT INTO #Test VALUES( 3 ,'womens') 
INSERT INTO #Test VALUES( 3 ,'jeans') 

INSERT INTO #Test VALUES( 4 ,'clothing') 
INSERT INTO #Test VALUES( 4 ,'mens') 
INSERT INTO #Test VALUES( 4 ,'tops') 
INSERT INTO #Test VALUES( 4 ,'t-shirts') 

INSERT INTO #Test VALUES( 5 ,'clothing') 
INSERT INTO #Test VALUES( 5 ,'mens') 
INSERT INTO #Test VALUES( 5 ,'tops') 
INSERT INTO #Test VALUES( 5 ,'vests') 

То, что я хочу быть в состоянии сделать, это выбрать хэштегом, например, «игрушки», а затем вытащить все другие хештегов, которые имеют отношение (через productId).

Это приводит набор, который должен быть возвращен при запросе «игрушки»:

hashtag, count 
lego, 2 
construction, 1 
lego-city, 1 

Любая помощь или идеи о том, как идти о реализации этого была бы оценена.

ответ

0

SQL Fiddle

Сервер 2012 Настройка схемы MS SQL:

create table YourTable 
(
    Product_id int, 
    hashtag varchar(25) 
) 


insert into YourTable values 
( 1,   'toys   '), 
( 1,   'lego   '), 
( 1,   'construction '), 
( 2,   'toys   '), 
( 2,   'lego   '), 
( 3,   'lego   '), 
( 2,   'lego-city ') 

Запрос 1:

select T1.hashtag, 
     count(*) as [count] 
from YourTable as T1 
where exists (
      select * 
      from YourTable as T2 
      where T2.hashtag = 'toys' and 
        T1.Product_id = T2.Product_id 
      ) and 
     T1.hashtag <> 'toys' 
group by T1.hashtag 

Results:

|  HASHTAG | COUNT | 
|---------------|-------| 
| construction |  1 | 
| lego   |  2 | 
| lego-city  |  1 | 
+0

Я думаю, что вы пригвоздили его;) – user2008865

+0

http://sqlfiddle.com/#!6/17ff5/1 – user2008865

0

попробовать это

select hashtag,count(hashtag) as count from #product_hashtags group by hashtag 
+0

Это дало бы мне результаты для всей таблицы product_hashtags, однако это не помогает с поиском хештегов, которые связаны только «игрушки» – user2008865

+0

просто добавить, где условие => где hashtag = 'toys' –

0
CREATE TABLE #Test (ProductID int, Hashtag varchar(30)) 

INSERT INTO #Test VALUES( 1 ,'toys') 
INSERT INTO #Test VALUES( 1 ,'lego') 
INSERT INTO #Test VALUES( 1 ,'construction') 
INSERT INTO #Test VALUES( 2 ,'toys') 
INSERT INTO #Test VALUES( 2 ,'lego') 
INSERT INTO #Test VALUES( 2 ,'lego-city') 


SELECT * FROM #Test 


SELECT * FROM (
SELECT Hashtag, COUNT(ProductID) Counter FROM #Test 
GROUP BY Hashtag) as x 
where x.Hashtag <> 'toys' 

Является ли это то, что вы хотите?

+0

Не совсем, поскольку в таблице могут быть другие товары, например: – user2008865

+0

INSERT INTO #Test VALUES (3, 'одежда') INSERT INTO #TEST VALUES (3, 'women') INSERT INTO #Test VALUES (3, 'jeans') INSERT INTO #TEST VALUES (4, 'cars') INSERT INTO #TEST VALUES (4, 'vechicle') INSERT INTO #TEST VALUES (4, 'rental') – user2008865

+0

Затем дайте нам более подходящий пример и дополнительную информацию о таблице и информации из таблицы. – CiucaS

0

Используйте приведенный ниже запрос:

SELECT Hashtag, COUNT(Hashtag) 
FROM #Test 
WHERE ProductID IN (SELECT ProductID FROM #Test WHERE Hashtag = 'toys') 
    AND Hashtag <> 'toys' 
GROUP BY Hashtag 
Смежные вопросы