2017-09-29 24 views
-1

私は特定年の毎月の販売データを取得しようとしていますが、クエリの作成に問題があります。ここで毎月の販売データを取得する方法

は、私がここで

SELECT COUNT(`id`) AS `total_order` 
FROM orders 
WHERE date BETWEEN ? AND ? 
GROUP BY `total_order` 

を試してみた何が私のテーブルには、今ここに

---------------------------------------- 
| id | item_name | amount | time  | 
| 21 | item_1 | 10  | 1506675630 | 
| 22 | item_2 | 30  | 1506675630 | 
| 23 | item_3 | 70  | 1506675630 | 
| 24 | item_4 | 100 | 1506675630 | 
---------------------------------------- 

のように見える方法である私は、例えばのために、クエリ

1 - Total Sales amount made from the beginning of the year till today. 
2 - Sales made Today 
3 - Sales made in Last Month 
4 - Sales Made in Last 3 month 
5 - Sales Made in Last 6 Month 
6 - Total Number of Sales made in every month of this particular year 

から何をしたいです - 1月 - 20 2月-100 3月 - 200 &など。

この複雑なクエリをどのように達成できますか?

+0

日付の数値を変換するためのこのリンクが見つかりました:https://stackoverflow.com/questions/19271007/converting-a-numeric-value-to-date-time – Alberslash

+0

@Alberslash said –

+2

私はあなたが実際に別のクエリーを求めていると感じています。同じクエリで異なる時間グループを表すことはできません。また、それはあなたが私たちにあなたのための質問をするように求めているように感じる、あなたの猶予はそれが見えるべきものでさえ近くではない、それは理にかなっているのだろうかと思う。 – whiteTea

答えて

0
SELECT `id` AS `Order_Number`, item_name, SUM(Amount) 
    FROM orders 
    WHERE time >= '01/01/17' 
    GROUP BY date 

あなたの最初の結果が得られます。他を試してみて、私は何を得る

+0

GROUP BYが無効で、古いMySQLバージョンでは予期しない結果が返され、 GROUP BY句が指定されている場合、SELECTリストの各列参照は、グループ化列を識別するか、または集合関数の引数でなければなりません。 – jarlh

+0

確かにORDER BY 1を使用することは、あまりにも、あるいは特に私の仕事場では予測できない可能性があります。誰かが別の列を追加した場合どうなりますか –

+0

ORDER BY ordinal-positionはANSI SQL標準から20年以上前に削除されました。 (そして、GROUP BY順序番号は決して標準にはありませんでした。) – jarlh

0

をお知らせこれはあなたの最初の質問ここで

SELECT 
DATE_FORMAT(FROM_UNIXTIME(time), '%Y-%m') as interval, 
COUNT(*) AS sales_made, 
SUM(amount) AS sales_amount 
FROM orders 
WHERE 
time BETWEEN UNIX_TIMESTAMP('2017-01-01') AND UNIX_TIMESTAMP('2018-01-01') 
GROUP BY 1 
ORDER BY 1; 
+0

SQLクエリにエラーがあります.SQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックして、正しい構文が近くにあることを確認してください。interval、COUNT(*)AS sales_made、 –

+0

'Interval'は予約語です... – jarlh

0

は、私は仕事だと思うものです答え:最初の5つのクエリの

はこのような何かを試してみてください。

SELECT SUM(amount) 
    FROM orders 
    WHERE DATE_FORMAT(FROM_UNIXTIME(`orders.time`), '%Y-%m-%d') BETWEEN ? AND ? 

そして最後の1のためにあなたが必要と

SELECT DATE_FORMAT(FROM_UNIXTIME(`orders.time`), '%Y-%m-%d') AS 'date', SUM(amount) 
     FROM orders 
     WHERE date between ? AND ? 
     GROUP BY DATE_FORMAT(date, '%Y%m') 

、それは仕事をdoesntの場合は、FROM_UNIXTIMEずに試すことができます。

関連する問題