标签: subquery

MySQL:从内联子查询返回多个列

我正在创建一个SQL语句,它将逐月返回销售摘要.

摘要将列出日期,销售总数和销售总价值的一些简单列.

但是,除了这些专栏之外,我还想再增加3个专栏,根据花费的数量列出月份最佳客户.对于这些列,我需要某种内联子查询,可以返回他们的ID,名称和他们花费的金额.

我当前的努力使用内联SELECT语句,但是,根据我对如何实现这些内容的知识,每个内联语句只能返回一列和一行.

为了解决这个问题,我当然可以创建3个独立的内联语句,但是,除了这看似不切实际的,它还会增加查询时间.

SELECT  
    DATE_FORMAT(OrderDate,'%M %Y') AS OrderMonth,
    COUNT(OrderID) AS TotalOrders, 
    SUM(OrderTotal) AS TotalAmount, 

    (SELECT SUM(OrderTotal) FROM Orders WHERE DATE_FORMAT(OrderDate,'%M %Y') = OrderMonth GROUP BY OrderCustomerFK ORDER BY SUM(OrderTotal) DESC LIMIT 1) AS TotalCustomerAmount,

    (SELECT OrderCustomerFK FROM Orders WHERE DATE_FORMAT(OrderDate,'%M %Y') = OrderMonth GROUP BY OrderCustomerFK ORDER BY SUM(OrderTotal) DESC LIMIT 1) AS CustomerID,

    (SELECT CustomerName FROM Orders INNER JOIN Customers ON OrderCustomerFK = CustomerID WHERE DATE_FORMAT(OrderDate,'%M %Y') = OrderMonth GROUP BY OrderCustomerFK ORDER BY SUM(OrderTotal) …
Run Code Online (Sandbox Code Playgroud)

mysql sql subquery

56
推荐指数
3
解决办法
6万
查看次数

MySQL如何使用返回多行的SELECT子查询INSERT INTO表?

MySQL如何使用返回多行的SELECT子查询INSERT INTO表?

  INSERT INTO Results
    (
     People,
     names,
    )
    VALUES
    (
     (
       SELECT d.id
       FROM Names f
       JOIN People d ON d.id  = f.id
     ),

     (
      "Henry"
     ),
    );
Run Code Online (Sandbox Code Playgroud)

WANT来填充新表与此子查询返回的所有结果.如何在不获取ERROR 1242(21000)的情况下执行此操作:子查询返回超过1行

mysql select subquery insert-into

56
推荐指数
5
解决办法
10万
查看次数

你能在SQL中定义"文字"表吗?

是否有任何SQL子查询语法允许您从字面上定义临时表?

例如,像

SELECT
  MAX(count) AS max,
  COUNT(*) AS count
FROM
  (
    (1 AS id, 7 AS count),
    (2, 6),
    (3, 13),
    (4, 12),
    (5, 9)
  ) AS mytable
  INNER JOIN someothertable ON someothertable.id=mytable.id
Run Code Online (Sandbox Code Playgroud)

这将节省必须执行两个或三个查询:创建临时表,将数据放入其中,然后在连接中使用它.

我正在使用MySQL,但会对其他可以做类似事情的数据库感兴趣.

mysql sql subquery temp-tables

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

如何在mySQL中的子查询中指定父查询字段?

有没有办法在mySQL的子查询中指定父查询字段?

例如:
我用PHP编写了一个基本的公告板类型程序.

在数据库中,每个帖子包含:id(PK)和parent_id(父帖子的id).如果帖子本身是父级,则其parent_id设置为0.

我正在尝试编写一个mySQL查询,它将查找每个父帖子以及父母拥有的子节点数.

$query = "SELECT id, (
      SELECT COUNT(1) 
      FROM post_table 
      WHERE parent_id = id
) as num_children
FROM post_table
WHERE parent_id = 0";
Run Code Online (Sandbox Code Playgroud)

棘手的部分是第一个id不知道它应该引用子查询之外的第二个id.我知道我可以做SELECT id AS id_tmp然后在子查询中引用它,但是如果我还想返回id并保持"id"作为列名,那么我必须做一个返回的查询我有2列相同的数据(这对我来说似乎很乱)

$query = "SELECT id, id AS id_tmp, 
            (SELECT COUNT(1)
            FROM post_table
            WHERE parent_id = id_tmp) as num_children
         FROM post_table
         WHERE parent_id = 0";
Run Code Online (Sandbox Code Playgroud)

凌乱的方式很好,但我觉得有机会在这里学到一些东西,所以我想我会发布这个问题.

php mysql subquery parent-child

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

使用Postgresql进行高效的最新记录查询

我需要做一个大问题,但我只想要最新的记录.

对于单个条目,我可能会做类似的事情

SELECT * FROM table WHERE id = ? ORDER BY date DESC LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

但是我需要为大(数千个条目)数量的记录提取最新记录,但只记录最新条目.

这就是我所拥有的.效率不高.我想知道是否有更好的方法.

SELECT * FROM table a WHERE ID IN $LIST AND date = (SELECT max(date) FROM table b WHERE b.id = a.id);
Run Code Online (Sandbox Code Playgroud)

sql postgresql subquery distinct

49
推荐指数
3
解决办法
6万
查看次数

SQLAlchemy - WHERE子句中的子查询

我刚刚开始使用SQLAlchemy,但仍然无法解决一些概念问题.

归结为基本元素,我有两个这样的表(这是通过Flask-SQLAlchemy):

class User(db.Model):
    __tablename__ = 'users'
    user_id = db.Column(db.Integer, primary_key=True)

class Posts(db.Model):
    __tablename__ = 'posts'
    post_id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('users.user_id'))
    post_time = db.Column(db.DateTime)

    user = db.relationship('User', backref='posts')
Run Code Online (Sandbox Code Playgroud)

我将如何查询用户列表及其最新帖子(不包括没有帖子的用户).如果我使用SQL,我会这样做:

SELECT [whatever]
FROM posts AS p
    LEFT JOIN users AS u ON u.user_id = p.user_id
WHERE p.post_time = (SELECT MAX(post_time) FROM posts WHERE user_id = u.user_id)
Run Code Online (Sandbox Code Playgroud)

所以我确切地知道"想要的"SQL以获得我想要的效果,但不知道如何在SQLAlchemy中"正确地"表达它.

编辑:如果它很重要,我在SQLAlchemy 0.6.6上.

python sqlalchemy subquery

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

使用SubQuery MySQL插入INTO

我有这个声明:

INSERT INTO qa_costpriceslog (item_code, invoice_code, item_costprice)
    VALUES (1, 2, (SELECT item_costprice FROM qa_items WHERE item_code = 1));
Run Code Online (Sandbox Code Playgroud)

我正在尝试插入值副本与item_costprice的相同数据,但显示错误:

Error Code: 1136. Column count doesn't match value count at row 1
Run Code Online (Sandbox Code Playgroud)

我怎么能解决这个问题?

mysql insert subquery

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

如何在表达式中重用另一个结果列的结果列

例:

SELECT
   (SELECT SUM(...) FROM ...) as turnover,
   (SELECT SUM(...) FROM ...) as cost,
   turnover - cost as profit
Run Code Online (Sandbox Code Playgroud)

当然这是无效的(至少在Postgres中)但如何在查询中实现相同而不重写子查询两次?

sql postgresql subquery

47
推荐指数
4
解决办法
8万
查看次数

JPA 2.0,Criteria API,子查询,表达式

我曾尝试多次使用子查询和IN表达式编写查询语句.但我从来没有成功过.

我总是得到异常,"关键字'IN'附近的语法错误",查询语句是这样构建的,

SELECT t0.ID, t0.NAME
FROM EMPLOYEE t0
WHERE IN (SELECT ?
          FROM PROJECT t2, EMPLOYEE t1
          WHERE ((t2.NAME = ?) AND (t1.ID = t2.project)))
Run Code Online (Sandbox Code Playgroud)

我知道'IN'失败前的这个词.

你有没有写过这样的问题?有什么建议吗?

jpa subquery criteria-api in-subquery jpa-2.0

44
推荐指数
3
解决办法
14万
查看次数

子查询与相关子查询之间的区别

下面的SQL查询是普通查询还是相关子查询?

SELECT UserID,
       FirstName,
       LastName,
       DOB,
       GFName,
       GLName,
       LoginName,
       LoginEffectiveDate,
       LoginExpiryDate,
       Password,
       Email,
       ReportingTo,
       Mobile,
       CommunicationPreference,
       IsActive
FROM   (SELECT row_number() OVER (ORDER BY FirstName) AS Row,
               UserID,
               FirstName,
               LastName,
               DOB,
               GFName,
               GLName,
               LoginName,
               LoginEffectiveDate,
               LoginExpiryDate,
               Password,
               Email,
               ReportingTo,
               Mobile,
               CommunicationPreference,
               IsActive
        FROM   DivakarUserRegistration)  T
Run Code Online (Sandbox Code Playgroud)

此外,有人可以说明两者之间的差异

sql sql-server subquery correlated-subquery

43
推荐指数
4
解决办法
27万
查看次数