社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

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

Cogicero • 5 年前 • 1405 次点击  

我有一张有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
 
1405 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Bill Karwin
Reply   •   1 楼
Bill Karwin    5 年前

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

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

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

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;