我希望在输出中按如下所示进行分层:
我的数据:
Name | Cost | Level
----------------+--------+------
Car1 | 2000 | 1
Component1.1 | 3000 | 2
Component1.2 | 2300 | 3
Computer2 | 5000 | 1
Component2.1 | 2000 | 2
Component2.2 | Null | 3
输出:显示所有包含货币的数据,并按级别对其进行排序,例如首先是1,然后是2,然后是3,然后再从1开始。 >
Name | Level
------------------+------
Car1 | 1
Component1.1 | 2
Component1.2 | 3
Computer | 1
Component2.1 | 2
ORDER BY
的作用是:
Name | Level
----------------+------
Car1 | 1
Computer1 | 1
Component1.1 | 2
Component2.1 | 2
Component1.2 | 3
Component2.2 | 3
我尝试了CONNECT BY PRIOR
函数,但效果不佳
SELECT Name, Level
FROM Product
CONNECT BY PRIOR Level;
答案 0 :(得分:0)
在MySQL中,您通常会使用“ order by”。因此,如果要在“行”表行上排序,则语法将如下所示:
SELECT * FROM items ORDER BY level ASC
您可以使用ASC(升序)或DESC(降序)。
希望这会对您有所帮助。
答案 1 :(得分:0)
您可以使用以下一个
SELECT Name, Level
FROM Auction
ORDER BY Name, Level
WHERE Money!='Null' ;
按名称进行排序将按层次结构顺序打印结果,但是如果它具有称为父ID的列,则显示起来会更容易。
答案 2 :(得分:0)
我为您建议:
SELECT Name, Level FROM Product ORDER BY Name, Level WHERE Money!='Null' ASC;
我希望这对你兄弟有帮助
答案 3 :(得分:0)
目前尚不清楚这是否是您真正期望的。从您的数据集中看来,您想根据组件末尾的某种版本号对组件进行数字排序。如果这确实是您想要的,则可以忽略名称和顺序中的非数字字符,而应使用纯数字,直到字符串的末尾(带有必需的where
子句)。
ORDER BY REPLACE ( name, TRANSLATE(name,' .0123456789',' '),'');
如果是这种情况,那么在level
上也添加ORDER BY
不会有任何区别,除非您的版本和级别的数字顺序是同步的。
如果您有诸如component2_name1.2
之类的组件可能会破坏此逻辑,则可能会出现问题,为此您可能需要REGEXP
来标识所需的模式。但是,从您的数据来看,情况似乎并非如此,我认为情况确实如此,您可能想弄清楚这是否不是您数据集中可能一直存在的内容。
这是为您的样本数据获得的结果的演示。
这将起作用,数字字符始终是有效的小数,并且只有一个小数点。如果您有复杂的版本控制系统,例如1.1.8
,2.1.1
等,则它需要在REPLACE ( name, TRANSLATE(name,' .0123456789',' '),'')
之上进行复杂的排序。
您会在此类Here
之类的帖子中找到此类示例注意 :我也请您阅读说明here,以了解如何提出一个好的问题。这样可以避免所有试图理解和回答您问题的人感到困惑。