2

以下は私がテーブルに持っているものですmyTable

+--------+--------+--------+--------+
| value1 | value2 | value3 | value4 |
+--------+--------+--------+--------+
|   9    |   4    |   3    |   3    |
|   1    |   2    |   9    |   3    |
|   1    |   2    |   3    |   4    |
|   1    |   2    |   3    |   4    |
+--------+--------+--------+--------+

として出力したい

+--------+--------+--------+--------+
| value1 | value2 | value3 | value4 |
+--------+--------+--------+--------+
|   1    |   2    |   3    |   4    |
+--------+--------+--------+--------+

value1=1その列の1は3回だからです。

value2=2その列の2は3回だからです。

value3=3その列では3が3回だからです。

value4=44はその列の2倍であり、それはその列のすべての共通数の最大数であるためです。

value4最も一般的な値は3と4です。出力では、4が3,4で最大であるため、4を取得する必要があります。

mysqlでこれを達成できますか?

アップデート1

SQLフィドルのテーブル

アップデート2

js-fiddleに進む必要がないように、ここにも回答をリストしています。(@ypercubeの回答による)

SELECT
  ( SELECT value1
    FROM myTable
    GROUP BY value1
    ORDER BY COUNT(*) DESC
           , value1 DESC
    LIMIT 1
  ) AS value1,

  ( SELECT value2
    FROM myTable
    GROUP BY value2
    ORDER BY COUNT(*) DESC
           , value2 DESC
    LIMIT 1
  ) AS value2,

  ( SELECT value3
    FROM myTable
    GROUP BY value3
    ORDER BY COUNT(*) DESC
           , value3 DESC
    LIMIT 1
  ) AS value3,

  ( SELECT value4
    FROM myTable
    GROUP BY value4
    ORDER BY COUNT(*) DESC
           , value4 DESC
    LIMIT 1
  ) AS value4
;
4

2 に答える 2

3
SELECT
  ( SELECT value1
    FROM myTable
    GROUP BY value1
    ORDER BY COUNT(*) DESC
           , value1 DESC
    LIMIT 1
  ) AS value1,

  ( SELECT value2
    FROM myTable
    GROUP BY value2
    ORDER BY COUNT(*) DESC
           , value2 DESC
    LIMIT 1
  ) AS value2,
...
  ( SELECT valueN
    FROM myTable
    GROUP BY valueN
    ORDER BY COUNT(*) DESC
           , valueN DESC
    LIMIT 1
  ) AS valueN
;

SQL フィドル: test-2

于 2012-05-30T11:31:30.103 に答える
-1

これはおそらく、データを保存する理想的な方法ではありません。
キーと値のペアを使用して 4 つの列を正規化することを検討することをお勧めします。
(つまり、列ごとに 1 つの行を意味します)

(UNIONを使用して、探しているものを達成できます)

(select value1, null, null, null from TABLE group by value1 order by count(*) desc, value1 desc limit 1)
union
(select null, value2, null, null from TABLE group by value2 order by count(*) desc, value2 desc limit 1)
union
(select null, null, value3, null from TABLE group by value3 order by count(*) desc, value3 desc limit 1)
union
(select null, null, null, value4 from TABLE group by value4 order by count(*) desc, value4 desc limit 1)
于 2012-05-30T11:29:24.847 に答える