DESC 的 SQL 顺序不起作用
Posted
技术标签:
【中文标题】DESC 的 SQL 顺序不起作用【英文标题】:SQL order by DESC not working 【发布时间】:2014-06-10 15:03:21 【问题描述】:我正在使用子查询进行相对较小的查询,我想按降序对子查询结果进行排序。但在结果中,子查询没有按降序排列。看不到 ORDER BY 对我不起作用的原因...
我的查询:
select
customers.id,
customers.Name,
customers.Surname,
(select ifnull(sum(bets.amount),0)
from bets
where customers.id=bets.customerId
and bets.date >'2014-06-01'
and bets.date <'2014-06-02'
order by bets.amount DESC
) as '1st_June',
(select ifnull(sum(bets.amount),0)
from bets
where customers.id=bets.customerId
and bets.date >'2014-06-02'
and bets.date <'2014-06-03'
order by bets.amount DESC
) as '1st_June',
from customers
group by customers.id
我需要一个 DESC 订单,因为我想限制 100 个,所以我得到前 100 个值。有人可以建议一种方法吗...?
【问题讨论】:
您想要每位客户的前 100 名投注吗?如果是这样,您使用的是什么数据库? 或者.. 前 100 个投注金额值...和/或无论 6 月 1 日还是 6 月 2 日的最高投注? 您的子查询按 desc 顺序排序。但是,您不能保证在连接两个查询后,结果会以相同的顺序显示。为什么不在最后按日期和金额对它们进行排序? 【参考方案1】:Order By 不会像那样结转过去的 group by。
这应该会给你你正在寻找的东西:
SELECT customers.id
,customers.Name
,customers.Surname
,(
SELECT ifnull(sum(bets.amount), 0)
FROM bets
WHERE customers.id = bets.customerId
AND bets.date > '2014-06-01'
AND bets.date < '2014-06-02'
) AS First_June
,(
SELECT ifnull(sum(bets.amount), 0)
FROM bets
WHERE customers.id = bets.customerId
AND bets.date > '2014-06-02'
AND bets.date < '2014-06-03'
) AS Second_June
FROM customers
GROUP BY customers.id
ORDER BY First_June DESC
,Second_June DESC
LIMIT 100
注意:(改为“First_June”。以数字开头的列名在多个 SQL Server 中存在问题,并且您没有指定您使用的是哪个。Oracle、MS SQL、mysql、Postgres 等)
【讨论】:
请注意,arserbin3 将您的第二个子查询的别名从First_June
更改为 Second_June
,并将按第一个子查询然后第二个子查询对列表进行排序。
感谢@Elias 澄清这一点。我认为这是基于日期范围的错字,并修复了它。
它几乎可以工作,但有时订单之间有 0 个值
@user3669523 你能详细说明一下吗?我真的不明白你想说什么
@user3669523 按First_June
中的金额排序,然后按Second_June
中的金额排序。因此它将获取第二列的所有值,并按第一列的降序排列。以上是关于DESC 的 SQL 顺序不起作用的主要内容,如果未能解决你的问题,请参考以下文章
mysql中order by 排序用asc和desc不起作用怎么回事
android appium单击“content-desc”属性不起作用
DESC 中的订单记录在 SequelizeJS 中不起作用
Selenium Xpath 中的正则表达式不起作用 //*[contains(@content-desc,"Resend in .*?[0-9a-zA-Z]*[0-9][0-9a-zA-Z