Py学习  »  DATABASE

在mysql行的100列中选择至少6个值

Cogicero • 6 年前 • 1585 次点击  

我有一张有103列的桌子。第一列(rowid)是行索引,下一列包含日期,第三列包含字符串(名称),然后有100列(命名为a1到a100)每个列都包含一个整数。我正在尝试编写一个查询,以获取这100列中每行的最低6个值。

这是我试过的。我不得不把100个专栏都写出来(有更好的方法吗?),这只得到最小的1,而不是最小的6:

SELECT LEAST(A1,A2,A3,A4,...A100) FROM myTable WHERE rowID=1

我在想也许我可以使用5个查询每次运行最少的命令,将结果返回到后端,然后后端将排除包含上一个查询中最少值的列。不过,我不确定这是最好的方法,因为我试图将其全部保存在mysql中。是否有方法使用子查询来执行此操作?或者其他有效的方法。任何帮助都将不胜感激!

编辑:我还需要知道从哪些列中获得这6个最小值。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/46709
文章 [ 1 ]  |  最新文章 6 年前
Bill Karwin
Reply   •   1 楼
Bill Karwin    6 年前

您似乎正在以非规范化的方式存储多值属性。

如果需要对这些值进行面向集的比较,它们应该存储在 ,而不是列。

您可以“取消激活”它们,因此每个值都在自己的行上,如下所示:

SELECT 1 AS ValNo, A1 AS Val FROM MyTable WHERE rowID=1
UNION ALL 
SELECT 2, A2 FROM MyTable WHERE rowID=1
UNION ALL
SELECT 3, A3 FROM MyTable WHERE rowID=1
UNION ALL
SELECT 4, A4 FROM MyTable WHERE rowID=1
UNION ALL
...
UNION ALL
SELECT 100, A100 FROM MyTable WHERE rowID=1

然后将其放入子查询中,得到最低的6个值。

SELECT ValNo, Val
FROM ( ... subquery above ... ) AS t
ORDER BY Val
LIMIT 6

最好存储一个表,其中一列是值,最多100 为每个人 rowId 以下内容:

CREATE TABLE MyNewTable (
  RowId INT,
  OrdinalId TINYINT, -- 1 to 100
  Aval INT,
  PRIMARY KEY (RowId, OrdinalId)
);

然后您可以更简单地查询它:

SELECT OrdinalId, Aval
FROM MyNewTable
WHERE RowId = 1
ORDER BY Aval
LIMIT 6;