我正在创建一个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如何使用返回多行的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行
是否有任何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的子查询中指定父查询字段?
例如:
我用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)
凌乱的方式很好,但我觉得有机会在这里学到一些东西,所以我想我会发布这个问题.
我需要做一个大问题,但我只想要最新的记录.
对于单个条目,我可能会做类似的事情
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) 我刚刚开始使用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上.
我有这个声明:
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)
我怎么能解决这个问题?
例:
SELECT
(SELECT SUM(...) FROM ...) as turnover,
(SELECT SUM(...) FROM ...) as cost,
turnover - cost as profit
Run Code Online (Sandbox Code Playgroud)
当然这是无效的(至少在Postgres中)但如何在查询中实现相同而不重写子查询两次?
我曾尝试多次使用子查询和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'失败前的这个词.
你有没有写过这样的问题?有什么建议吗?
下面的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)
此外,有人可以说明两者之间的差异
subquery ×10
mysql ×5
sql ×5
postgresql ×2
criteria-api ×1
distinct ×1
in-subquery ×1
insert ×1
insert-into ×1
jpa ×1
jpa-2.0 ×1
parent-child ×1
php ×1
python ×1
select ×1
sql-server ×1
sqlalchemy ×1
temp-tables ×1