|
Posted by Erland Sommarskog on 07/02/05 00:58
(bob@coolgroups.com) writes:
> SELECT
> standardgame.gamename,
> standardgame.rowteamname,
> standardgame.colteamname,
> standardgame.dollarvalue,
> standardgame.gameid,
> standardgame.cutoffdatetime,
> standardgame.gametype,
> standardgame.gameowner,
> (100-COUNT(purchasedsquares.gameid)) AS squaresremaining
> FROM standardgame
> LEFT OUTER JOIN
> purchasedsquares ON standardgame.gameid = purchasedsquares.gameid
> where gametype='$gametype' and dollarvalue = '$dollarvalue' and
> gameowner = '
> GROUP BY standardgame.gameid
> order by
> CASE squaresremaining WHEN 0 THEN 1 ELSE 0 END ASC,
> squaresremaining ASC
>
>
> The problem is... MySQL doesn't seem to want to let me use
> squaresremaining in that case statement since it's not an official
> column name. Any idea how I can reference squaresremaining in the case
> statement?
The best way is to wrap the query into a derived table. There is however
a second problem: you cannot group only by gameid. All non-aggregate columns
must be in the GROUP BY clause. A much cleaner solution is to keep just
the core to the derived table, and then join with standardgame again.
This gives us:
SELECT s1.gamename, s1.rowteamname, s1.colteamname, s1.dollarvalue,
s1.gameid, s1.cutoffdatetime, s1.gametype, s1.gameowner,
s2.squaresremaining
FROM standardgame s1
JOIN (SELECT s.gameid, (100 - COUNT(p.gameid)) AS squaresremaining
FROM standardgame s
LEFT JOIN purchasedsquares p ON s.gameid = p.gameid
WHERE gametype='$gametype'
AND dollarvalue = '$dollarvalue'
AND gameowner = '
GROUP BY s.gameid) AS s2
ORDER BY CASE s2.squaresremaining WHEN 0 THEN 1 ELSE 0 END ASC,
s2.squaresremaining ASC
(I've also introduced aliases, to make the query less verbose and
more readable.) Note that there is a syntax error just before GROUP
BY, a unclosed string literal.
The above syntax is fine in MS SQL Server. If you are really using
MySQL, I can't tell whether this syntax is good. In theory it should
be, because it's all ANSI compatible. Hm, wait, the CASE expression
in the ORDER BY may not be; you might have to add a column to the
result set with the expression for that.
In any case, this newsgroup is for MS SQL Server, so if you are using
MySQL, you are likely to get better help elsewhere.
--
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se
Books Online for SQL Server SP3 at
http://www.microsoft.com/sql/techinfo/productdoc/2000/books.asp
[Back to original message]
|