1

こんにちは、フィードバックと評価 (1 から 5 の間) を格納するテーブルがあります。

これがSQLで実行できるかどうかさえわかりません。

やりたいことは、月ごとにグループ化し、すべての Q1、Q2、Q3、および Q4 を 1 つの列に合計することです。そのグループ化された月のレコードの量が別の列に表示されます。

次に、PHP を使用して、それらの月の平均レートを算出できます。

  unixStamp      |  Q1   |   Q2   |   Q3    |   Q4
-----------------------------------------------------
  1362149504     |  5    |    4   |    3    |   5
  1362136774     |  5    |    5   |    2    |   5
  ..........     |  ...  |  ....  |  ....   |  ....

これは達成したいです。

  Mnth           |  score  |   count  | 
---------------------------------------
  1              |  192    |    20    | 
  2              |  365    |    40    | 
  ..........     |  ...    |  ....    |  
4

2 に答える 2

2

CROSS JOINaを使用してデータのピボットを解除し、結果を取得できます。

SELECT Mnth,
  sum(data) score,
  count(data) `count`
FROM 
(
  SELECT MONTH(FROM_UNIXTIME(unixStamp)) Mnth, 
    CASE q.col
      WHEN 'Q1' THEN Q1
      WHEN 'Q2' THEN Q2
      WHEN 'Q3' THEN Q3
      WHEN 'Q4' THEN Q4
    END AS DATA
  FROM yourtable t
  CROSS JOIN 
  (
    SELECT 'Q1' AS col
    UNION ALL SELECT 'Q2'
    UNION ALL SELECT 'Q3'
    UNION ALL SELECT 'Q4'
  ) q
) s
group by Mnth

デモで SQL Fiddle を参照してください

于 2013-03-01T16:47:32.143 に答える
1

にはGROUP BY任意の式 (または式のエイリアスSELECT) を含めることができSUM()、4 つの四半期ごとの列を集計としてまとめることができます。

SELECT
  /* Retrieve only the month from unixStamp */
  MONTH(FROM_UNIXTIME(unixStamp)) AS Mnth,
  /* SUM() as an aggregate the 4 quarterly cols */
  SUM(Q1+Q2+Q3+Q4) AS score,
  /* COUNT(*) aggregate will list number of records for group */
  COUNT(*) AS `count`
FROM yourtable
GROUP BY Mnth

上記は、より適切と思われる月/年の組み合わせではなく、月のみでグループ化されることに注意してください。それが必要な場合は、次のようなものを使用してください

/* Supplies month like 2013-02 */
SELECT
  DATE_FORMAT(FROM_UNIXTIME(unixtimestamp), '%Y-%m') AS Mnth,
  ...
于 2013-03-01T16:41:45.293 に答える