www.91084.com

GVKun编程网logo

SQL select语句中Order By 1的目的是什么?(sql中order by的作用)

15

在本文中,您将会了解到关于SQLselect语句中OrderBy1的目的是什么?的新资讯,同时我们还将为您解释sql中orderby的作用的相关在本文中,我们将带你探索SQLselect语句中Orde

在本文中,您将会了解到关于SQL select语句中Order By 1的目的是什么?的新资讯,同时我们还将为您解释sql中order by的作用的相关在本文中,我们将带你探索SQL select语句中Order By 1的目的是什么?的奥秘,分析sql中order by的作用的特点,并给出一些关于c# – 在Batch方法中使用Select(x => x)的目的是什么?、Groovy SQL忽略动态select语句中的order by子句、mysql select语句中or的用法是什么、mysql select语句中使用函数的实用技巧。

本文目录一览:

SQL select语句中Order By 1的目的是什么?(sql中order by的作用)

SQL select语句中Order By 1的目的是什么?(sql中order by的作用)

我正在阅读一些工作中的旧代码,并注意到有几个带有order by 1子句的视图。这有什么作用?

例子:

Create view v_payment_summary ASSELECT 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;

答案1

小编典典

这个:

ORDER BY 1

…被称为“序数” - 该数字代表基于 SELECT 子句中定义的列数的列。在您提供的查询中,这意味着:

ORDER BY A.PAYMENT_DATE

这不是推荐的做法,因为:

  1. 这不明显/不明确
  2. 如果列顺序发生变化,查询仍然有效,因此您可能会冒着按您不想要的东西排序的风险

c# – 在Batch方法中使用Select(x => x)的目的是什么?

c# – 在Batch方法中使用Select(x => x)的目的是什么?

我正在查看 Batch方法的源代码,我看到了这个:
// Select is necessary so bucket contents are streamed too
yield return resultSelector(bucket.Select(x => x));

有一条我不太明白的评论.我已经测试了这种方法而没有使用Select,它运行良好.但似乎有一些我遗漏的东西.我想不出任何必要的例子,那么在这里使用Select(x => x)的实际目的是什么?

以下是完整的源代码供参考:

private static IEnumerable<TResult> BatchImpl<TSource,TResult>(
        this IEnumerable<TSource> source,int size,Func<IEnumerable<TSource>,TResult> resultSelector)
    {
        TSource[] bucket = null;
        var count = 0;

        foreach (var item in source)
        {
            if (bucket == null)
                bucket = new TSource[size];

            bucket[count++] = item;

            // The bucket is fully buffered before it's yielded
            if (count != size)
                continue;

            // Select is necessary so bucket contents are streamed too
            yield return resultSelector(bucket.Select(x => x));

            bucket = null;
            count = 0;
        }

        // Return the last bucket with all remaining elements
        if (bucket != null && count > 0)
            yield return resultSelector(bucket.Take(count));
    }

解决方法

总结评论中的内容,理论上这是多余的.在这种情况下,延迟执行无关紧要.在收益率已经完成执行:已经计算了桶的内容,没有什么可以推迟.

迭代器块行为也没有问题 – 每次我们回到这个实现时,都会重置并重新创建存储桶(在yield之后,bucket = null).即使有人将结果转换为数组类型并修改它,我们也不在乎.

这种方法的一个优点似乎只是优雅:在对resultSelector的所有调用之间存在类型一致性.没有“冗余”选择,实际类型大部分时间都是TSource [],IEnumerable< TSource>对于没有填满整个桶的尾随元素.

但是,可以想象以下场景:

>使用此函数的人注意到实际类型是数组
>由于需要提高性能,他们将收到的批量转换为TSource [](例如,他们现在可以更有效地跳过元素,as Skip is not optimized for arrays)
>他们使用该方法没有任何问题,因为在他们的情况下发生Count()%size == 0

直到,之后,会发生一个额外的元素弹出,导致最后一个产量被执行.现在,对TSource []的强制转换将会失败.

因此,根据元素的数量和大小,方法在结果类型方面的行为会不一致(传递给给定的回调).可以想象其他复杂的情况,这种不一致可能会导致麻烦,例如某些ORM,根据实际类型,将对象序列化到不同的表中.在这种情况下,数据片段最终会出现在不同的表格中.

这些场景当然都是基于其他一些错误,并没有证明没有Select实现是错误的.然而,从某种意义上说,它对Select更加友好,它将这种不幸情景的数量减少到最少.

Groovy SQL忽略动态select语句中的order by子句

Groovy SQL忽略动态select语句中的order by子句

我在Grails应用程序中使用Groovy sql来查询未连接为应用程序数据源的数据库.对于页面,默认情况下,sql select语句不包含order by子句.如果用户单击其中一个标记,我想动态更改查询以在指定方向上对指定列进行排序.当我尝试将order by子句添加到select语句时,我得到一个(捕获的)sqlException,表明我的查询未正确结束.

我的查询:

sql.eachRow("select * from mytable where type = ''SUMMARY'' and acolumn=${columnValue} order by ${sortColumn} ${sortOrder}") { row ->
                    results << row.toRowResult()
                }

我可以通过对返回的列表进行排序来解决问题,但是如果可能的话,我想在sql语句中执行此操作.这是一个已知的问题吗?

解决方法

这是Groovy试图用你的所有参数替换?并制作PreparedStatement

这不适用于ORDER BY子句,因此您需要use Sql.expand

尝试:

sql.eachRow( "select * from mytable where type = ''SUMMARY'' and acolumn=${columnValue} order by ${sql.expand(sortColumn)} ${sql.expand(sortOrder)}") { row ->
  results << row.toRowResult()
}

mysql select语句中or的用法是什么

mysql select语句中or的用法是什么

MysqL select语句中的or关键字用于设置查询的条件;只要符合查询条件的其中一个,记录就会被查询出来,如果不符合查询条件中的任何一条,记录将被排除掉,语法为“SELECT*FROM...WHERE 条件1 OR 条件2”。

本教程操作环境:windows10系统、MysqL8.0.22版本、Dell G3电脑。

MysqL select语句中or的用法是什么

在MysqL中,经常会遇到这样的情况,在写条件语句where时,可能会同时有多个条件的“或”或者“与”,但经常会达不到效果,经百度,本人发现一个where语句中同时出现条件的“与”或者“或的时候”,要将多个OR用小括号括起来再和AND进行“与”,或者将多个AND用小括号括起来再与OR进行“或”。

使用OR关键字时:

  • 只要符合这几个查询条件的其中一个条件,这样的记录就会被查询出来。

  • 如果不符合这些查询条件中的任何一条,这样的记录将被排除掉。

使用and关键字时:

  • 需要符合所有条件,这样的记录就会被查询出来。

  • 如果有任何一个条件不符合,这样的记录将被排除掉。

eg.    select * from table from id=1 or id=2 and price>=10;

这条语句默认执行的是id=2并且price大于等于10的,或者是id=1。

如果加上括号:

select * from table from (id=1 or id=2) and price>=10;

则这条语句执行的是id=1或id=2,并且price大于等于10。

or和and的混合使用。首先,要明确的是and相对于or来说,前者的优先级是要更高。

总结:要使用and和or的混合使用,or条件要用 ()包括在一起,组成一个部分,不然,并不能达到预期的效果。

推荐学习:mysql视频教程

mysql select语句中使用函数

mysql select语句中使用函数

实例如下:

创建数据表:

1

2

3

4

5

6

mysql&gt; CREATE TABLE Employee(

    -&gt;     id            int,

    -&gt;     first_name    VARCHAR(15),

    -&gt;     last_name     VARCHAR(15)

    -&gt; );

Query OK, 0 rows affected (0.03 sec)

登录后复制

 

向表中插入数据:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

mysql&gt; insert into Employee(id,first_name, last_name)values (1,''Jason'',''Martin'');

Query OK, 1 row affected (0.00 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name)values(2,''Alison'',''Mathews'');

Query OK, 1 row affected (0.00 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name)values(3,''James'',''Smith'');

Query OK, 1 row affected (0.00 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name)values(4,''Celia'',''Rice'');

Query OK, 1 row affected (0.00 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name)values(5,''Robert'',''Black'');

Query OK, 1 row affected (0.00 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name)values(6,''Linda'', ''Green'');

Query OK, 1 row affected (0.01 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name)values(7,''David'',''Larry'');

Query OK, 1 row affected (0.02 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name)values(8,''James'',''Cat'');

Query OK, 1 row affected (0.00 sec)

登录后复制

select语句中使用函数

1

2

3

4

5

6

7

8

9

10

11

12

13

14

mysql&gt; SELECT concat(First_Name, " ",Last_Name) AS Name FROM Employee;

+----------------+

| Name           |

+----------------+

| Jason Martin   |

| Alison Mathews |

| James Smith    |

| Celia Rice     |

| Robert Black   |

| Linda Green    |

| David Larry    |

| James Cat      |

+----------------+

8 rows in set (0.00 sec)

登录后复制

今天关于SQL select语句中Order By 1的目的是什么?sql中order by的作用的分享就到这里,希望大家有所收获,若想了解更多关于c# – 在Batch方法中使用Select(x => x)的目的是什么?、Groovy SQL忽略动态select语句中的order by子句、mysql select语句中or的用法是什么、mysql select语句中使用函数等相关知识,可以在本站进行查询。

本文标签: