标签: select

显示一个字段中具有非唯一值的行

我熟悉如何聚合行,如这个答案所示:

我还熟悉如何使用 HAVING 子句过滤聚合结果。

我似乎无法理解(因此它会粘住)是如何根据值或比较其他行来过滤行,而不聚合它们。

我知道答案涉及一些有关窗口函数或窗口子句的内容,事实上我以前已经成功完成过。但我似乎并没有记住它是如何运作的;我觉得我错过了一些基本的东西。

举个例子,信息如下:

 fruit_name | some_field 
------------+------------
 apple      |       3.25
 apple      |        6.8
 apple      |        0.7
 orange     |        2.6
 banana     |        3.5
 banana     |       2.49
 cherry     |          1
 grapefruit |        2.6
 grapefruit |        2.7
Run Code Online (Sandbox Code Playgroud)

我想要获取行数(按水果名称)大于 1 的所有行,因此它应该如下所示:

 fruit_name | some_field 
------------+------------
 apple      |       3.25
 apple      |        6.8
 apple      |        0.7
 banana     |        3.5
 banana     |       2.49
 grapefruit |        2.6
 grapefruit |        2.7
Run Code Online (Sandbox Code Playgroud)

执行此操作的正确惯用方法是什么?

(如果可能的话,我想要一个 SQL 标准答案,如果有一种更简单的 Postgres 特定方法来做到这一点,我也想知道。)

postgresql select window-functions

3
推荐指数
1
解决办法
1855
查看次数

错误:子查询必须仅返回一列

我有两张桌子,一张是Category,另一张是Product

表说明有

类别

  • 姓名
  • 描述
  • Parent_id(自引用键)(最多可达 3 级)

产品

  • 姓名
  • 描述
  • 类型
  • category_id(类别表的外键)

    我想在单个产品上显示所有类别以及相关产品。因此,为了获取关联的类别,我使用以下查询。我可以在自引用表中进行左连接,但无法获取产品数据列表,因为这是一个子查询,而子查询只会返回单个列。

        select                                                                                                                                                                                                      
                   cat1.id, ARRAY(select name, type, description from product where
                   product.category_id = cat1.id)
                   as category_1_products_data,
    
                   cat2.id, ARRAY(select name, type, description from product where
                   product.category_id = cat2.id)
                   as category_2_products_data,
    
                   cat3.id, ARRAY(select name, type, description from product where
                   product.category_id = cat3.id)
                   as category_3_products_data
        from       category cat1
        left join  category cat2
        on         cat2.parent_id = cat1.id
        left join  category cat3
        on         cat3.parent_id = cat2.id
        where      cat1.parent_id is …
    Run Code Online (Sandbox Code Playgroud)

postgresql join subquery select

3
推荐指数
1
解决办法
2万
查看次数

MySQL:如何优化导致负载非常高的某个SELECT语句?

有一个包含 25.000.000 个条目的表,我有以下查询,该查询每 2 秒启动一次,这会导致非常高的负载(在 Amazon AWS 中高达 40 AAS)。执行时间需要20秒到5分钟,甚至会导致用户浏览器超时,掉线率很高。

SELECT COUNT ( * ) AS `chk` 
  FROM ( SELECT `item_id` 
           FROM `items` 
          WHERE `item_status` IN (...) 
            AND `item_type` = ? 
            AND `user_id` != ? 
            AND `item_name` IN (...) 
          LIMIT 3 
       ) AS OTHERS
;
Run Code Online (Sandbox Code Playgroud)

索引优化已完成 - 、、 和user_id均已item_name建立索引(每列一个索引)。item_typeitem_status

更多信息:

  • 一个用户拥有 1 - 1.000.000 百万条条目
  • item_name 是varchar128
  • item_type 的基数为 7
  • item_status 的基数也是 7
  • 只需知道是否有三个或更多匹配项

请注意,在大约 50% 的情况下,MySQL 必须检查完整的表,因为找到的项目少于 3 个。因此,该限制仅在商品数量超过 3 件的情况下才有用。 …

mysql performance index query select

3
推荐指数
1
解决办法
1565
查看次数

Maria DB - 分别为每个 uniq 索引列建立索引是否有意义?

我们正在运行 10.2.44-MariaDB-log MariaDB 服务器。现在我正在创建具有这种结构的表

Primary('id')
UniqueIndex('colA', 'colB', 'colc');
Index('cola')
Index('colb')
Index('colc')
Run Code Online (Sandbox Code Playgroud)

我想知道,为每一列设置这些索引是否有意义?这些列可以像Select cola或一样合法地查询JOIN ON cola,但是服务器是否知道在这些情况下使用索引,或者它是否使用唯一索引,因为这些列已经在那里了?

mysql mariadb index select

3
推荐指数
1
解决办法
139
查看次数

SQL Server:生成范围内缺失年份的行(系统年份 + 9)

我有一个 SQL Server 2019 表,其中包含某些年份的行:

with data (year_, amount) as (
select 2024, 100 union all
select 2025, 200 union all
select 2025, 300 union all
select 2026, 400 union all
select 2027, 500 union all
select 2028, 600 union all
select 2028, 700 union all
select 2028, 800 union all
select 2029, 900 union all
select 2031, 100
)
select * from data

     YEAR_     AMOUNT
---------- ----------
      2024        100
      2025        200
      2025        300
      2026        400
      2027        500
      2028        600 …
Run Code Online (Sandbox Code Playgroud)

sql-server select sql-server-2019

3
推荐指数
1
解决办法
569
查看次数

如何避免在一系列嵌套的 SELECT 语句中重复信息?

我正在处理一个 SQL 查询,它根据过去的购买(行业是场地票务)将客户历史记录放在一起。报告将是大的,类似于 80-90 列,输出 CSV 中的每个事件或每个记录的事件类别一列。

数据库结构要求我使用嵌套的 select 语句将必要的数据放入每条记录的列中——每列包含该类型事件的票证数量。我在理论上知道如何执行此操作,但是每个嵌入的 select 语句都非常大,以至于完整报告将突破我的数据库界面上的 8,000 个字符限制。这些语句之一如下所示:

(select count (*)
FROM
guest ig, event2 e, eventseat es, "order" o
WHERE ig.guestid = g.guestid
and ig.guestid = o.guestid
and o.orderid = es.orderid
and e.eventid = es.eventid
and e.incometype = 'T'
and e.eventtype in ('SS', 'BMF')
and es.status in ('2','4')
and es.price <> '0.00'
and es.price <> '5.00'
and e.year = '2010'       <-- THESE LINES ARE THE ONLY ONES THAT 
and e.run in ('SS-DANCE') <-- …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server select

2
推荐指数
1
解决办法
1185
查看次数

SQL 选择 WHERE 行已更新

USE [RF_WORLD]
GO
/****** Object:  Trigger [dbo].[lastdeathtrigg]    Script Date: 08/20/2012 10:52:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Mauro Tamm
-- =============================================
ALTER TRIGGER [dbo].[lastdeathtrigg]
   ON  [dbo].[tbl_pvporderview]
   AFTER UPDATE
AS 
IF (UPDATE(Death))
BEGIN
    SET NOCOUNT ON;
DECLARE @userserial int;
SELECT @userserial ='serial' WHERE UPDATE(Death)
Insert INTO [RF_WORLD].[dbo].[lastdeath]
(serial)
VALUES (@userserial)
END
Run Code Online (Sandbox Code Playgroud)

where 部分是可疑的,它会像那样工作吗?本质上,如果它实际更新,我只需要它选择行序列值。

trigger sql-server select update

2
推荐指数
1
解决办法
3749
查看次数

ora-01410 在 select 语句中偶尔出现无效的 RowID

我有一个选择,通过连接查找一些数据。系统运行Oracle 10.02g,选择如下

SELECT distinct t1.crit
  FROM table_name1 t1
 INNER JOIN table_name2 t2
    ON t1.crit = t2.crit
 WHERE NVL (t2.qty, 0) + NVL (t2.adds, 0) - NVL (t2.remove, 0) > 0
   AND t1.process_id = 'some_process_id'
   AND t1.item_no = 'some item NO'
   AND t1.to_gen = 1
Run Code Online (Sandbox Code Playgroud)

其中 t1 在 (item_no, crit) 上有一个索引,t2 在 (item_no, crit, X) 上有一个索引,X 是一些附加列。

此语句的目的是找到我需要在附加表中为其生成数据的所有候选对象。当新数据生成后,t1.to_gen 列被设置为0。目前还不清楚,如果运行这个语句的软件进行中间提交,例如为一个item_no 生成一些新数据,设置t1。 to_gen = 0 并提交,然后使用相关语句的游标中的下一个 item_no。

该语句在我的环境中每天成功执行几次,但在极少数情况下,我从 oracle 收到错误,我不清楚其来源:

ora-01410: invalid RowID
Run Code Online (Sandbox Code Playgroud)

由于 select 语句不直接使用伪列 RowID,Oracle 将不得不在内部使用它。

这个问题的根源是什么?

更新:听起来很可悲,系统会进行中间提交,但这不是问题的根源。

oracle-10g select corruption

2
推荐指数
1
解决办法
2万
查看次数

从 Postgresql 检索固定范围的行

我有一个疑问:

select qid,ansid,ans from table1 where askerid='something'
Run Code Online (Sandbox Code Playgroud)

此查询可以检索许多行。但我想一次只显示 50 行,然后如果用户单击more,则应检索接下来的 50 行。我想到了这样的查询:

select qid,ansid,ans 
from table1 
where askerid='something' 
limit 100
minus 
select qid,ansid,ans 
from table1 
where askerid='something' 
limit 50
Run Code Online (Sandbox Code Playgroud)

我想知道这是否是一个良好的查询性能和替代查询,其性能优于上述查询。

postgresql view select

2
推荐指数
1
解决办法
4815
查看次数

在重复密钥更新时插入 ... (...) (Select...)

你能帮我解决一个问题吗。任务是在 MySQL 数据库中插入一条记录。条款:

  • 如果记录存在 - 更新记录。
  • 如果记录不存在 - 创建一个新的。

表 'NETFLOW'.'Month' 中的关键列是:

  • '年'
  • '月'
  • '日'
  • '小时'
  • '源地址'
  • 'dstaddr'。

事情是尽快查询,如果可能的话,在一个查询中。

当前查询的文本是:

    INSERT INTO `netflow`.`Month` (`Year`, `Month`, `Day`, `Hour`, `srcaddr`,`dstaddr`, `doctets`)
    (
      SELECT 
        YEAR( FROM_UNIXTIME(  `unix_secs` ) ) AS `YEAR`, 
        MONTH( FROM_UNIXTIME(  `unix_secs` ) ) AS `MONTH`, 
        DAYOFMONTH( FROM_UNIXTIME(  `unix_secs` ) ) AS `DAY`, 
        HOUR( FROM_UNIXTIME(  `unix_secs` ) ) AS `HOUR`,  
        `srcaddr` ,  
        `dstaddr` ,  
        `doctets` 
      FROM  `netflow`.`raw` 
        WHERE `unix_secs` <= 1394179200
      GROUP BY 
        `YEAR`, 
        `MONTH`, 
        `DAY`, 
        `HOUR`,
        `srcaddr`,
        `dstaddr`
    )
    ON …
Run Code Online (Sandbox Code Playgroud)

mysql insert duplication select

2
推荐指数
1
解决办法
2万
查看次数