假设有一个主键,我可能有一个解决方案:
SELECT id, MAX(count) FROM (
SELECT id, val, COUNT(*) AS count FROM (
SELECT id, MOD(col1, 10) AS val FROM your_table
UNION ALL SELECT id, MOD(col2, 10) AS val FROM your_table
UNION ALL SELECT id, MOD(col3, 10) AS val FROM your_table
UNION ALL SELECT id, MOD(col4, 10) AS val FROM your_table
UNION ALL SELECT id, MOD(col5, 10) AS val FROM your_table) vals
GROUP BY id, val) counts
GROUP BY id;
请注意,这些函数是特定于 mysql 的,但类似的函数应该存在于几乎任何其他数据库中。
Innermost SELECT 使用 id 和 val 列构建派生表,其中 val 是每列的最后一个数字。 Next SELECT out from that 按 id 计算每个值。最外层 SELECT 按 id 返回最大值。
然后,如果您希望在列值旁边显示结果,您只需将此查询与原始表连接起来:
SELECT col1, col2, col3, col4, col5, max_count
FROM your_table yt
JOIN (
SELECT id, MAX(count) max_count FROM (
SELECT id, val, COUNT(*) AS count FROM (
SELECT id, MOD(col1, 10) AS val FROM your_table
UNION ALL SELECT id, MOD(col2, 10) AS val FROM your_table
UNION ALL SELECT id, MOD(col3, 10) AS val FROM your_table
UNION ALL SELECT id, MOD(col4, 10) AS val FROM your_table
UNION ALL SELECT id, MOD(col5, 10) AS val FROM your_table) vals
GROUP BY id, val) counts
GROUP BY id) mc ON yt.id = mc.id;
这是输出:
+------+------+------+------+------+-----------+
| col1 | col2 | col3 | col4 | col5 | max_count |
+------+------+------+------+------+-----------+
| 1 | 13 | 23 | 21 | 31 | 3 |
+------+------+------+------+------+-----------+