简而言之:有没有办法对GROUP_CONCAT语句中的值进行排序?
查询:
GROUP_CONCAT((SELECT GROUP_CONCAT(parent.name SEPARATOR " » ")
FROM test_competence AS node, test_competence AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.id = l.competence
AND parent.id != 1
ORDER BY parent.lft) SEPARATOR "<br />\n") AS competences
Run Code Online (Sandbox Code Playgroud)
我得到这一行:
工艺品»细木工
管理»组织
我希望这样:
管理»组织
工艺品»细木工
我想按时间排序,但似乎无法做到这一点?
mysql> show processlist;
+--------+-------------+--------------------+------+---------+--------+----------------------------------+------------------------------------------------------------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+--------+-------------+--------------------+------+---------+--------+----------------------------------+------------------------------------------------------------------------------------------------------+
| 1 | system user | | NULL | Connect | 226953 | Waiting for master to send event | NULL |
| 2 | system user | | v3 | Connect | 35042 | Locked | update postings a
left join cities b on b.id=a.job_city_id
left join states h on h.id=b.stat |
| 313888 | irnadmin …Run Code Online (Sandbox Code Playgroud) 简而言之:一个包含超过1600万条记录的表[大小为2GB].使用ORDER BY*primary_key时,使用SELECT的LIMIT偏移越高,查询变得越慢
所以
SELECT * FROM large ORDER BY `id` LIMIT 0, 30
Run Code Online (Sandbox Code Playgroud)
远远不及
SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
Run Code Online (Sandbox Code Playgroud)
这也只能订购30条记录.所以这不是ORDER BY的开销.
现在,当获取最新的30行时,大约需要180秒.如何优化该简单查询?
我在PostgreSQL 8.3中有一个简单的SQL查询,可以获取一堆注释.我在子句中为构造提供了一个值的排序列表:INWHERE
SELECT * FROM comments WHERE (comments.id IN (1,3,2,4));
Run Code Online (Sandbox Code Playgroud)
这将以任意顺序返回注释,在我碰巧是ids之类的1,2,3,4.
我希望结果行像IN构造中的列表一样排序:(1,3,2,4).
怎么实现呢?
我想知道是否存在(可能更好的方式)按IN()子句中的值的顺序排序.
问题是我有2个查询,一个获取所有ID,第二个查询所有信息.第一个创建我想要第二个订购的ID的顺序.ID以正确的顺序放入IN()子句中.
所以它就像(非常简化):
SELECT id FROM table1 WHERE ... ORDER BY display_order, name
SELECT name, description, ... WHERE id IN ([id's from first])
Run Code Online (Sandbox Code Playgroud)
问题是第二个查询不会按照将ID放入IN()子句的顺序返回结果.
我发现的一个解决方案是将所有ID放入具有自动递增字段的临时表中,然后将该字段连接到第二个查询中.
有更好的选择吗?
注意:由于第一个查询是"由用户"运行而第二个查询是在后台进程中运行,因此无法使用子查询将2到1的查询组合在一起.
我正在使用MySQL,但我认为让它注意到其他数据库的选项可能也很有用.
我希望按降序顺序收到按 "Product.Name" 排序的列表.
类似于下面按升序对列表进行排序的功能,只是相反,这可能吗?
var newList = list.OrderBy(x => x.Product.Name).ToList();
Run Code Online (Sandbox Code Playgroud) 我正在阅读工作中的一些旧代码,并注意到有几个带有order by 1子句的视图.这取得了什么成果?
例:
Create view v_payment_summary AS
SELECT A.PAYMENT_DATE,
(SELECT SUM(paymentamount)
FROM payment B
WHERE PAYMENT_DATE = B.PAYMENT_DATE
and SOME CONDITION) AS SUM_X,
(SELECT SUM(paymentamount)
FROM payment B
WHERE PAYMENT_DATE = B.PAYMENT_DATE
and SOME OTHER CONDITION) AS SUM_Y
FROM payment A
ORDER BY 1;
Run Code Online (Sandbox Code Playgroud) 我有一个SQLite数据库,我试图按字母顺序排序.问题是,SQLite在排序过程中似乎没有考虑A = a,因此我得到如下结果:
A B C T a b c g
我想得到:
A a b B C c g T
我不知道需要做什么特殊的SQL事情?
SELECT * FROM NOTES ORDER BY title
Run Code Online (Sandbox Code Playgroud) 我有一张桌子:
+-----------+-------+------------+
| client_id | views | percentage |
+-----------+-------+------------+
| 1 | 6 | 20 |
| 1 | 4 | 55 |
| 1 | 9 | 56 |
| 1 | 2 | 67 |
| 1 | 7 | 80 |
| 1 | 5 | 66 |
| 1 | 3 | 33 |
| 1 | 8 | 34 |
| 1 | 1 | 52 |
Run Code Online (Sandbox Code Playgroud)
我试过了group_concat:
SELECT li.client_id, …Run Code Online (Sandbox Code Playgroud) 我将数字保存为VARCHARMySQL数据库.INT由于其他一些具体情况,我无法制作它们.
排序时将它们作为字符而不是数字.
在数据库中我有
1 2 3 4 5 6 7 8 9 10...
Run Code Online (Sandbox Code Playgroud)
在我的页面上,它显示如下的有序列表:
1 10 2 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)
如何使数字按升序排列?
sql-order-by ×10
mysql ×6
sql ×5
sorting ×3
group-concat ×2
c# ×1
filter ×1
limit ×1
list ×1
numbers ×1
performance ×1
postgresql ×1
processlist ×1
sql-in ×1
sqlite ×1
string ×1