为什么你需要把你自己创建的(例如列select 1 as "number"后)HAVING,而不是WHERE在MySQL?
是否有任何缺点而不是做WHERE 1(编写整个定义而不是列名)?
这两个查询有什么区别?
SELECT f.name,
u.name,
u.id
FROM families f
JOIN units u
ON f.unit_id = u.id
HAVING u.id IN( 43, 413, 22 )
Run Code Online (Sandbox Code Playgroud)
和:
SELECT f.name,
u.name,
u.id
FROM families f
JOIN units u
ON f.unit_id = u.id
WHERE u.id IN( 43, 413, 22 )
Run Code Online (Sandbox Code Playgroud)
这两个查询的结果完全相同.那么区别在哪里?
有没有可能做这样的事情?
SELECT
@z:=SUM(item),
2*@z
FROM
TableA;
Run Code Online (Sandbox Code Playgroud)
对于第二列,我总是得到NULL.奇怪的是,在做某事的同时
SELECT
@z:=someProcedure(item),
2*@z
FROM
TableA;
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作.为什么?
我试图在Arel和/或Rails 3中的Active Record中嵌套SELECT查询以生成以下SQL语句.
SELECT sorted.* FROM (SELECT * FROM points ORDER BY points.timestamp DESC) AS sorted GROUP BY sorted.client_id
Run Code Online (Sandbox Code Playgroud)
可以通过执行创建子查询的别名
points = Table(:points)
sorted = points.order('timestamp DESC').alias
Run Code Online (Sandbox Code Playgroud)
但后来我被困在如何将它传递给父查询(缺少调用#to_sql,这听起来很难看).
如何使用SELECT语句作为Arel(或Active Record)中的子查询来完成上述操作?也许有一种完全不同的方式来完成这个不使用嵌套查询的查询?
我试图在两个表中为一些完整性编写一些查询.查询是这样的
SELECT if( o.is_discounted !=1, o.item_cost, o.discounted_item_cost ) AS order_item_total,
SUM( oi.quantity * oi.price ) AS item_total
FROM orders o
INNER JOIN order_items oi ON oi.order_id = o.id
WHERE order_item_total != item_total
GROUP BY o.id
Run Code Online (Sandbox Code Playgroud)
我过去肯定会在这些列中使用别名,所以我不确定为什么在这种情况下它告诉我order_item_total不是列.
我有这样的查询:
SELECT User.id, 10*10 as distance
FROM USERS
INNER JOIN
(
SELECT Location.user_id,
min(10 * 10) as mindistance
FROM Location
GROUP BY Location.user_id
) L ON Users.id = Location.user_id AND distance = L.mindistance
Run Code Online (Sandbox Code Playgroud)
如果我保持原样,我会继续:
Unknown column 'distance' in 'on clause'
Run Code Online (Sandbox Code Playgroud)
但如果我把User.distance而不仅仅是距离,我得到:
MySQL syntax error near....
Run Code Online (Sandbox Code Playgroud)
我不能在计算字段上以这种方式使用别名吗?10*10只是一个简单的占位符,因为计算要复杂得多.
我有一个像这样的结果集:
ID | name | myvalue
1 | A1 | 22
2 | A2 | 22
3 | A3 | 21
4 | A4 | 33
5 | A5 | 33
6 | A6 | 10
7 | A7 | 10
8 | A8 | 10
9 | A9 | 5
Run Code Online (Sandbox Code Playgroud)
我想要的是,只包括包含最高"myvalue"的行(在前面的例子中是33),然后:
ID | name | myvalue
4 | A4 | 33
5 | A5 | 33
Run Code Online (Sandbox Code Playgroud)
IE查询应该选择最高的"myvalue"(IE 33),它应该删除myvalue <33的行
SELECT ..... WHERE myvalue = THE_HIGHEST_OF(myvalue)
Run Code Online (Sandbox Code Playgroud)
希望能够清楚......
先感谢您
编辑:
我目前的查询是 …
我试图减去2个别名,以便创建另一个别名,但我得到一个"未知列"错误.
这是我的SQL:
select o.id, o.name,
(select sum(l.source_expense)
from `assignments` as a
left join `leads` as l on (l.id = a.lead_id)
where a.{$this->sql_column}=o.id
and l.date_created between {$this->date_from} and {$this->date_to}
and find_in_set(l.vertical_id, '".implode(',', $this->app_user->verticals)."')
) as `expense`,
(select sum(a.buyer_revenue)
from `assignments` as a
left join `leads` as l on (l.id = a.lead_id)
where a.refunded=0
and a.{$this->sql_column}=o.id
and l.date_created between {$this->date_from} and {$this->date_to}
and find_in_set(l.vertical_id, '".implode(',', $this->app_user->verticals)."')
) as `revenue`,
`revenue` - `expense` as `profit`
from {$this->sql_table} as o
Run Code Online (Sandbox Code Playgroud)
基本上,我想profit通过减去revenue …
我的查询有问题,
SELECT id, pseudo, nom, prenom, sexe, ville,
FLOOR(DATEDIFF (NOW(), date_naissance)/365) AS mAge
FROM user
WHERE sexe = 'Homme' AND mAge BETWEEN 18 AND 25 OR ville = 'Bordeaux'
Run Code Online (Sandbox Code Playgroud)
它应该返回匹配用户的where条件.问题是如下,mAge不存在我得到以下错误:
看起来我的别名在where条件下无法正常工作.
如果我删除了mAge WHERE CLAUSE,我成功获得了mAge别名.
我需要你们
提前致谢 !