下面是表 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 在该列中是三次。
value2=2
因为 2 在该列中是三次。
value3=3
因为 3 在该列中是三次。
value4=4
因为 4 是该列中的两倍,并且是该列中所有常见数字的最大数字。
注意:value4
最常见的值为 3 和 4。在输出中我应该得到 4,因为 4 是 3,4 中最大的。
我可以在mysql中实现这个吗?
更新 1
Table at SQL Fiddle
更新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
;
最佳答案
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-Fiddle:test-2
关于mysql - 查找每列中最常见的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10815268/