Hi Brannon,
* Brannon King <[EMAIL PROTECTED]> [2006-05-23 05:35]:
* [EMAIL PROTECTED] <[EMAIL PROTECTED]> [2006-05-23 02:35]:
> >select qi, ri, drl, max(score), min(score) from ...
> >
> >What values of qi, ri, and drl would you want
> >this query to return?
> >
> >What you have to do is:
> >
> > SELECT qi, ri, drl, score
> > FROM ...
> > WHERE score=(SELECT max(score) FROM ...)
> >
> Thank you for the instruction, although the other query seemed
> to return the right results. (Not that I did any extensive
> testing....)
>
> So do I have to repeat all my constraints for both the main
> query and the subquery? Or is it even legal to specify a where
> clause when doing the max?
Hmm. I would normally suggest an inline view:
SELECT qi, ri, drl, score
FROM ( SELECT qi, ri, drl, score FROM [ rest of your original query here ]
) candidates
WHERE score = ( SELECT MAX( score ) FROM candidates );
Unfortunately SQLite doesn’t seem to capable of referring to
subqueries everywhere I’d expect to be able to – it complains
that it doesn’t know of a table `candidates`.
Using a named view will work:
CREATE VIEW candidates AS SELECT qi, ri, drl, score FROM [ rest of your
original query here ];
SELECT qi, ri, drl, score
FROM candidates
WHERE score = ( SELECT MAX( score ) FROM candidates );
However I have a hunch that it computes the result set for the
`WHERE` clause from scratch by redoing the entire query, instead
of using the already-computed result set from the `FROM` clause.
In that case you don’t gain any performance, “only” clarity.
Regards,
--
Aristotle Pagaltzis // <http://plasmasturm.org/>