Hi Buehmann !
I am using GROUP BY ?pid inside inner-query as well as outer-query
Like

> PREFIX mod:<http://www.example.com/datam/op/>
> PREFIX prod:<http://www.example.com/products/>
> SELECT DISTINCT ?pid (?title )(?count)# (?condition)
> FROM <http://www.example.com/products>
> WHERE {
>   ?pid dprop:productTitle ?title.
>   ?pid dprop:productDescription ?description.
>   {
>      SELECT (COUNT(?oid) AS ?count) #(?condition)

     FROM <http://www.example.com/offers> WHERE { ?oid oprop:isOfferOf
> ?pid. ?oid dprop:condition ?condition. } GROUP BY ?pid

  }
> }
> GROUP BY ?pid


I am still getting duplicate ?pid.
Second problem is I also wanted to get ?condition but if I'll un-comment
?condition then compiler is showing this error

Variable ?condition is used in the result set outside aggregate and not
> mentioned in GROUP BY clause


Can you please help me to correct this query.

Thank you.

On Sun, Jul 26, 2015 at 1:02 PM, buehmann <
[email protected]> wrote:

> What Andy means is that the pid variable of the subselect is not bound to
> the outer query. Sub-SELECTs are evaluated first, those values have to be
> propagated/projected to the outer query, otherwise you don't get the
> intended values.
> It's so simple add
> GROUP BY ?pid
>
> to the sub-SELECT and also add
>
> SELECT ... ?pid
>
> Lorenz
>
>
> On 26.07.2015 08:36, Nauman Ramzan wrote:
>
>> Dear Andy Good Morning !
>> Can you please explain more. How can I fix this problem ?
>> Because
>> in outer query I am getting ?pid one by one. in sub query instead of
>> taking
>> value from outer query subquery is taking value of ?pid from VALUES.
>>
>> My Problem I want to get Product information and counts of new and used
>>
>>> offers against each product.
>>>
>>
>> Thank you.
>> Regards
>> Nauman
>>
>> On Sat, Jul 25, 2015 at 9:06 PM, Andy Seaborne <[email protected]> wrote:
>>
>>  On 25/07/15 12:09, Nauman Ramzan wrote:
>>>
>>>  Dear Andy,
>>>>
>>>> I am using Jena ARQ.
>>>>
>>>> On Sat, Jul 25, 2015 at 3:02 PM, Nauman Ramzan <
>>>> [email protected]>
>>>> wrote:
>>>>
>>>>   Hi James Anderson !
>>>>
>>>>> Thank you for your help.
>>>>> Now construct this query
>>>>>
>>>>> CONSTRUCT{
>>>>>
>>>>>     ?pid dprop:title ?title;
>>>>>>         dprop:description ?description;
>>>>>>         dprop:brand ?brand;
>>>>>>         dprop:isPublic ?isPublic;
>>>>>>         dprop:count ?total;
>>>>>>         dprop:priceMin ?priceMin;
>>>>>>         dprop:condition ?condition;
>>>>>>         dprop:createdAt ?createdAt.
>>>>>> }
>>>>>> WHERE {
>>>>>>     ?pid dprop:productTitle ?title;
>>>>>>       dprop:productDescription ?description;
>>>>>>       dprop:productBrand ?brand;
>>>>>>       dprop:isPublic ?isPublic;
>>>>>>       dprop:createdAt ?createdAt.
>>>>>>       OPTIONAL { ?pid dprop:bulletpoint0 ?bulletpoint0 }
>>>>>>       OPTIONAL { ?pid dprop:bulletpoint1 ?bulletpoint1 }
>>>>>>       {
>>>>>>         SELECT (COUNT(?cond) AS ?total) (MIN(?pr) AS ?priceMin )
>>>>>>    ?condition WHERE{
>>>>>>           ?pid ^mod:isOfferOf ?oid.
>>>>>>           ?oid dprop:price ?pr.
>>>>>>           ?oid dprop:condition ?cond.
>>>>>>           BIND (if( ?cond = 1, "New", "Used") AS ?condition).
>>>>>>         }
>>>>>>       }
>>>>>>     VALUES ?pid { prod:Rl5RVl5R  prod:Rl5RVl5Q prod:Rl5RVl5W
>>>>>> prod:Rl5RVl5Y
>>>>>> prod:Rl5RVl5U }
>>>>>> }
>>>>>>
>>>>>>
>>>>> Everything is working fine. except sub-query calculation error. result
>>>>> of
>>>>> total is not correct.
>>>>>
>>>>>  That maybe because there are 2 different ?pid variables.
>>>
>>>          SELECT (COUNT(?cond) AS ?total) (MIN(?pr) AS ?priceMin )
>>>>>>    ?condition WHERE{
>>>>>>           ?pid ^mod:isOfferOf ?oid.
>>>>>>           ?oid dprop:price ?pr.
>>>>>>           ?oid dprop:condition ?cond.
>>>>>>           BIND (if( ?cond = 1, "New", "Used") AS ?condition).
>>>>>>         }
>>>>>>
>>>>> ?pid is not projected out so it is not joined with the one in the
>>> VALUEs
>>> clause.  You could GROUP BY ?pid and add it to the SELECT clause.  You
>>> can
>>> also just have
>>>
>>> WHERE {
>>>    SELECT ... { ... }
>>>    GROUP BY ?pid
>>> }
>>>
>>> with everything inside the SELECT's {}
>>>
>>>          Andy
>>>
>>>
>>>   My schema(relation between product and offer ) you can see in first
>>>
>>>> message.
>>>>>
>>>>> On Sat, Jul 25, 2015 at 1:00 PM, Andy Seaborne <[email protected]>
>>>>> wrote:
>>>>>
>>>>>   On 25/07/15 04:54, Nauman Ramzan wrote:
>>>>>
>>>>>>   Hi Here is my question in details. Now i am getting counts and other
>>>>>>
>>>>>>> info.
>>>>>>> but i want to define/use this result as data of outer block.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> http://answers.semanticweb.com/questions/32850/sparql-use-subquery-as-resultvariable-for-outer-query
>>>>>>> same as
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> http://stackoverflow.com/questions/31586989/sparql-use-subquery-as-result-variable-for-outer-query
>>>>>>> Thank you.
>>>>>>>
>>>>>>>
>>>>>>>  The query isn't legal SPARQL (parse error - non-group'ed variables
>>>>>> in
>>>>>> the
>>>>>> inner select - even after completing the prefixes).  Previously, you
>>>>>> indicated you were using Virtuoso.  Their support lists are on
>>>>>> SourceForge.
>>>>>>
>>>>>> It will help them to have a complete, minimal example.
>>>>>>
>>>>>>     A small amount of data
>>>>>>     A complete working query
>>>>>>
>>>>>>           Andy
>>>>>>
>>>>>>
>>>>>>
>>>>>>   On Tue, Jul 21, 2015 at 5:04 PM, Andy Seaborne <[email protected]>
>>>>>>
>>>>>>> wrote:
>>>>>>>
>>>>>>>    On 21/07/15 11:35, Nauman Ramzan wrote:
>>>>>>>
>>>>>>>     Hi all !
>>>>>>>>
>>>>>>>>  I have this type of data
>>>>>>>>>
>>>>>>>>>     <offer1> rdf:isOfferOf <product1>
>>>>>>>>>
>>>>>>>>>   <offer2> rdf:isOfferOf <product1>
>>>>>>>>>
>>>>>>>>>> <offer3> rdf:isOfferOf <product2>
>>>>>>>>>> <offer4> rdf:isOfferOf <product2>
>>>>>>>>>>
>>>>>>>>>>     <offer5> rdf:isOfferOf <product2>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>  <offer7> rdf:isOfferOf <product7>
>>>>>>>>>
>>>>>>>>> now I want to get all offers of product1, product2.
>>>>>>>>> second counts of offers.
>>>>>>>>> Thank you
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>    What have you tried?
>>>>>>>>>
>>>>>>>>>  A complete, minimal example of what you have tried makes it
>>>>>>>> easier to
>>>>>>>> answer the question.
>>>>>>>>
>>>>>>>>            Andy
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>

Reply via email to