0

ゾーンがあり、それらのゾーン内でチケットが販売されています。次のクエリを使用して、ゾーンごとに販売されたチケットの数を取得します。使用可能なゾーン(カウント<容量)が上になるように並べ替える必要があります。ソート順:

SELECT z.name, z.capacity,count(t.ticketid) as thecount  
FROM tickets t JOIN zones z ON z.zoneid=t.zoneid 
GROUP BY z.name ORDER BY z.sortorder

戻り値:

+ -------- + ---------- + ---------- +
name cap thecount
+ -------- + ----- ----- +----------+
ゾーン1| 100 | 100
ゾーン2| 300 | 300
Zone3 | 250 | 101
ゾーン4| 600 | 522
ゾーン5| 160 | 160
+ -------- + ---------- + ---------- +

次の順序で並べ替える必要があります:
Zone3
Zone4
Zone1
Zone2
Zone5

これを実現するために式などを使用する方法がわかりません---役立つヒントはありますか?

4

3 に答える 3

1
SELECT z.name, z.capacity,count(t.ticketid) as thecount   
FROM tickets t JOIN zones z ON z.zoneid=t.zoneid  
GROUP BY z.name  
order by case when thecount < c.capacity
              then thecount
              else c.capacity
         end
于 2012-05-25T21:49:15.643 に答える
1
SELECT *, capacity - thecount AS availableSeats
FROM (
    SELECT z.name, z.capacity,count(t.ticketid) as thecount  
    FROM tickets t JOIN zones z ON z.zoneid=t.zoneid 
    GROUP BY z.name
) t
ORDER BY availableSeats, name

でグループ化する必要があるかもしれないと思いますz.name, z.capacity

于 2012-05-25T22:10:03.673 に答える
0

したがって、GWilliams00の回答に基づいて、私は次のようになりました。

SELECT *, capacity < thecount AS availableSeats
FROM (
   SELECT z.name, z.capacity,count(t.ticketid) as thecount  
   FROM gt_tickets t JOIN gt_zones z ON z.zoneid=t.zoneid  
   GROUP BY z.name

) t
ORDER BY availableSeats,sortorder

'capacity <thecount'はブール値に評価されるため、これを使用して使用可能なゾーンを並べ替えることができます。その後、sortorderはそれらを正しい名前の順序で保持します。

于 2012-05-25T23:12:11.393 に答える