我有一个MySql查询,按no列命令我的结果(int,可以为null).简单的例子:
SELECT * FROM table ORDER BY no ASC
我想得到一个类似的结果集
1, 2, 3, 10, 52, 66, NULL, NULL, NULL
但我明白了
NULL, NULL, NULL, 1, 2, 3, 10, 52, 66
是否可以使用SQL查询?
我有一个非常大(超过80万行)的非规范化MySQL表.简化的架构如下所示:
+-----------+-------------+--------------+--------------+ | ID | PARAM1 | PARAM2 | PARAM3 | +-----------+-------------+--------------+--------------+ | 1 | .04 | .87 | .78 | +-----------+-------------+--------------+--------------+ | 2 | .12 | .02 | .76 | +-----------+-------------+--------------+--------------+ | 3 | .24 | .92 | .23 | +-----------+-------------+--------------+--------------+ | 4 | .65 | .12 | .01 | +-----------+-------------+--------------+--------------+ | 5 | .98 | .45 | .65 | +-----------+-------------+--------------+--------------+
我试图看看是否有一种优化查询的方法,其中我将权重应用于每个PARAM列(权重在0和1之间),然后将它们平均得出计算值SCORE.然后我想ORDER BY计算出的SCORE列.
例如,假设PARAM1的权重为.5,PARAM2的权重为.23,PARAM3的权重为.76,您最终会得到类似于:
SELECT ID, ((PARAM1 * .5) + (PARAM2 * .23) + (PARAM3 * .76)) / 3 …Run Code Online (Sandbox Code Playgroud) 在我的SQL查询中,我使用GROUP BY和ORDER BY子句选择数据.该表numbers在多行中具有相同的行,每行具有不同的时间.所以我想我想要应用GROUP BY子句.
但是在结果中返回最旧的时间与数字,但我需要最近的时间.
SELECT * FROM TABLE GROUP BY (numbers) ORDER BY time DESC
Run Code Online (Sandbox Code Playgroud)
查询看起来好像应首先应用GROUP BY然后ORDER BY ...但结果似乎不会以这种方式工作.
有没有什么办法解决这一问题?
我一直试图找到关于这个主题的东西,我似乎找不到任何东西,这里有几个问题,但它们对我的特定项目不起作用.
我问了一个关于更新表的类似问题,但它不能用于我真正想要的是结果列表.
--------------------------------------------------------
|id | hometeam |goalsfor|goalsagainst| awayteam |
--------------------------------------------------------
| 1 |Inter Milan | 3 | 1 | FC Barcelona |
--------------------------------------------------------
| 2 |FC Barcelona | 1 | 0 | Inter Milan |
--------------------------------------------------------
| 3 |Inter Milan | 4 | 0 | AC Milan |
--------------------------------------------------------
| 4 |AC Milan | 0 | 2 | Inter Milan |
--------------------------------------------------------
| 5 |Real Madrid | 2 | 0 | AC Milan |
--------------------------------------------------------
| 6 |AC Milan | …Run Code Online (Sandbox Code Playgroud) 以下基本LINQ to SQL语句不会导致orderby工作.正如您在T-SQL中看到的那样,没有orderby.你知道为什么吗?
LINQ to SQL:
var results = (from stats in db.t_harvest_statistics
orderby stats.unit_number
select stats.unit_number).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)
以上TSQL中的结果
SELECT
[Distinct1].[unit_number] AS [unit_number]
FROM ( SELECT DISTINCT
[Extent1].[unit_number] AS [unit_number]
FROM [dbo].[t_harvest_statistics] AS [Extent1]
) AS [Distinct1]
Run Code Online (Sandbox Code Playgroud) 我有一个表格,其中包含日期和时间,日期列,可以输入七天中的任何一天,并将它们设置为数据类型varchar.由于该表保存预订的时间为客户,我想从其中ID匹配的表中选择所有的日子,我想白天周一至周日进行排序.我希望我可以在此查询中添加一些内容来手动选择结果返回的顺序,如下所示:
select *
from requirements
where Family_ID = 1
ORDER BY Day, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
Run Code Online (Sandbox Code Playgroud)
这当然不起作用,但我只想表明我想要实现的目标.客户不一定每天都需要帮助,我只想显示他们预订的日子.
通过DESC和ASC排序对一周中的几天没有帮助,我将不胜感激如何实现这一目标的任何提示.
谢谢.
我在MySQL中有一个问题,做得对.但书籍代码略有不同.
书:
use tennis;
select playerno, datediff(coalesce(end_date, current_date),
begin_date) as Difference, position
from committee_members
where datediff(coalesce(end_date, current_date), begin_date) > 500
order by 1;
Run Code Online (Sandbox Code Playgroud)
1这个订单是什么?
我的代码也有效,几乎相同,除了:
select playerno, datediff(coalesce(end_date, current_date) AS Data,
order by Data;
Run Code Online (Sandbox Code Playgroud) 我有以下结果
VendorName | IncidentID | IncidentStatus | IncidentDate
-------------------------------------------------------
XYZ | 100 | Open | 02-JUN-2011
XYZ | 101 | Open | 03-JUN-2011
ABC | 102 | Open | 01-JUN-2011
XYZ | 103 | Open | 01-APR-2011
ABC | 105 | Open | 05-JUN-2011
Run Code Online (Sandbox Code Playgroud)
我想订购VendorName最新的事件.供应商ABC有最新的事件,因此它应该首先与同一供应商的所有其他事件,然后下一个供应商与所有相应的事件降序.期望的结果是这样的 -
VendorName | IncidentID | IncidentStatus | IncidentDate
-------------------------------------------------------
ABC | 105 | Open | 05-JUN-2011
ABC | 102 | Open | 01-JUN-2011
XYZ | 101 | Open | 03-JUN-2011
XYZ …Run Code Online (Sandbox Code Playgroud) 需要"配合" UPDATE用ORDER BY.我正在尝试使用游标,但得到错误:
Run Code Online (Sandbox Code Playgroud)cursor "cursupd" doesn't specify a line, SQL state: 24000
码:
BEGIN;
DECLARE cursUpd CURSOR FOR SELECT * FROM "table" WHERE "field" = 5760 AND "sequence" >= 0 AND "sequence" < 9 ORDER BY "sequence" DESC;
UPDATE "table" SET "sequence" = "sequence" + 2 WHERE CURRENT OF cursUpd;
CLOSE cursUpd;
COMMIT;
Run Code Online (Sandbox Code Playgroud)
怎么做正确?
没有光标,当我这样做时:
UPDATE "CableLinePoint" AS "t"
SET "sequence" = t."sequence" + 2
from (
select max("sequence") "sequence", "id"
from "CableLinePoint"
where
"CableLine" = …Run Code Online (Sandbox Code Playgroud) 如果我做
SELECT LISTAGG( COLUMN_VALUE ) WITHIN GROUP ( ORDER BY NULL ) AS OrderByNULL,
LISTAGG( COLUMN_VALUE ) WITHIN GROUP ( ORDER BY 1 ) AS OrderByCONST,
LISTAGG( COLUMN_VALUE ) WITHIN GROUP ( ORDER BY ROWNUM ) AS OrderByROWNUM
FROM TABLE( SYS.ODCIVARCHAR2LIST( '5', '222', '4' ) );
Run Code Online (Sandbox Code Playgroud)
输出是:
ORDERBYNULL ORDERBYCONST ORDERBYROWNUM
----------- ------------ -------------
222,4,5 222,4,5 5,222,4
Run Code Online (Sandbox Code Playgroud)
当使用ORDER BY非确定性排序(NULL或常量)时,查询似乎已完成字母数字排序,并在使用ORDER BY ROWNUM(确定性)时保持输入顺序.
该LISTAGG文件指出:
order_by_clause确定返回连接值的顺序.仅当ORDER BY列列表实现唯一排序时,该函数才是确定性的.
在查看分析函数时,它指出:
每当order_by_clause为多行产生相同的值时,该函数的行为如下:[...]对于所有其他分析函数,结果取决于窗口规范.如果使用RANGE关键字指定逻辑窗口,则该函数会为每个行返回相同的结果.如果使用ROWS关键字指定物理窗口,则结果是不确定的.
因此,据我所知,从文档中可以看出非确定性排序 - 但是,该函数根据字母数字排序而不是处理行的顺序(这是常见的)提供确定性输出 …
sql-order-by ×10
mysql ×5
sql ×3
oracle ×2
distinct ×1
group-by ×1
linq-to-sql ×1
listagg ×1
php ×1
postgresql ×1
sql-update ×1