1

最初の MySQL クエリは正常に動作しますが、お金のように見えるようにフォーマットされておらず、ドルだけになっています。2 番目のものは正しく書式設定されていますが、ORDER を無視して、order に average_sales を残していません。CONCACT と FORMAT を使用すると問題が発生する可能性はありますか? ありがとう!

最初のもの、注文は正しいです:

select Region,AVG(sales) as 'Average_Sales_by_Region', count(*) as '# of Dist in state'
from dist, Regions_US
where dist.state=Regions_US.State
group by Region
ORDER BY Average_Sales_by_Region DESC;

+--------------------+-------------------------------+-------------------------+
| Region             | Average_Sales_by_Region       | # of Dist in state      |
+--------------------+-------------------------------+-------------------------+
| Mountain           |                    20216.2162 |                      74 |
| West North Central |                    18267.5000 |                      40 |
| South Atlantic     |                    16225.2809 |                     178 |
| East South Central |                    14966.6667 |                      30 |
| West South Central |                    13704.3840 |                     125 |
| East North Central |                    12668.3544 |                      79 |
| New England        |                    11915.6250 |                      32 |
| Pacific            |                    11552.8083 |                     120 |
| Middle Atlantic    |                    10291.6031 |                     131 |
| Alaska-Hawaii      |                     8150.0000 |                       4 |
+--------------------+-------------------------------+-------------------------+

しかし、Average_Sales_by_Region がセントなしでドル金額を表示するように変更するように依頼されました。したがって、20216.2162 の一番上の数字は 20,216 ドルである必要があります。

したがって、お金を正しくフォーマットしている間、私の2番目のものは、注文を無視します:

select Region,CONCAT('$', FORMAT(AVG(sales), 0)) as 'Average_Sales_by_Region', count(*) as '# of Dist in state'
from dist, Regions_US
where dist.state=Regions_US.State
group by Region
ORDER BY Average_Sales_by_Region DESC;

+--------------------+-------------------------------+-------------------------+
| Region             | Average_Sales_by_Region       | # of Dist in state      |
+--------------------+-------------------------------+-------------------------+
| Alaska-Hawaii      | $8,150                        |                       4 |
| Mountain           | $20,216                       |                      74 |
| West North Central | $18,268                       |                      40 |
| South Atlantic     | $16,225                       |                     178 |
| East South Central | $14,967                       |                      30 |
| West South Central | $13,704                       |                     125 |
| East North Central | $12,668                       |                      79 |
| New England        | $11,916                       |                      32 |
| Pacific            | $11,553                       |                     120 |
| Middle Atlantic    | $10,292                       |                     131 |
+--------------------+-------------------------------+-------------------------+

ここで立ち往生しています。なぜ ORDER BY Average_Sales_by_Region DESC が最初のもので機能するのかわかりませんが、2 つ目では機能しません。唯一の違いは、AVG(sales) の代わりに CONCAT('$', FORMAT(AVG(sales), 0)) を使用することです。ありがとう!

4

4 に答える 4

1

このクエリを使用してみてください

select Region,CONCAT('$', FORMAT(AVG(sales), 0)) as 'Average_Sales_by_Region', count(*) as '# of Dist in state'
from dist, Regions_US
where dist.state=Regions_US.State
group by Region ORDER BY AVG(sales) DESC

この方法では、最初のクエリのように並べ替えますが、2 番目のクエリのように結果を表示します

于 2013-01-29T16:00:55.253 に答える
1

フォーマットされていない平均売上高で注文することもできます。

select Region,CONCAT('$', FORMAT(AVG(sales), 0)) as 'Average_Sales_by_Region', count(*) as '# of Dist in state'
from dist, Regions_US
where dist.state=Regions_US.State
group by Region
ORDER BY AVG(sales) DESC;
于 2013-01-29T16:01:27.490 に答える
0

数値を文字列に変換するORDER BYため、あなたを無視していません。FORMAT()したがって、表示されているのは、ORDER BY文字列形式に基づいています。

したがって、フォーマットされていない値に基づいて注文する必要があります。これを行うことをお勧めします:

select Region, AVG(sales) as 'Average_Sales_by_Region_NUMERICAL', CONCAT('$', FORMAT(Average_Sales_by_Region_NUMERICAL, 0)) as 'Average_Sales_by_Region', count(*) as '# of Dist in state'
from dist, Regions_US
where dist.state=Regions_US.State
group by Region
ORDER BY Average_Sales_by_Region_NUMERICAL DESC;

それはうまくいくはずです。AVG(sales)また、 2 回実行されることはありません。

于 2013-01-29T16:02:22.017 に答える
0

これを試して

   select Region,CONCAT('$', FORMAT(AVG(sales), 0)) as 'Average_Sales_by_Region',count(*) as '# of Dist in state'
   from dist, Regions_US
   where dist.state=Regions_US.State
   group by Region
   ORDER BY FORMAT(AVG(sales),0) DESC;
于 2013-01-29T16:05:11.500 に答える