相关疑难解决方法(0)

在哪里与HAVING

为什么你需要把你自己创建的(例如列select 1 as "number"后)HAVING,而不是WHERE在MySQL?

是否有任何缺点而不是做WHERE 1(编写整个定义而不是列名)?

mysql sql where-clause having-clause

241
推荐指数
5
解决办法
19万
查看次数

MySql - HAVING vs WHERE

这两个查询有什么区别?

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)

这两个查询的结果完全相同.那么区别在哪里?

mysql

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

MySQL - 在select中定义一个变量并在同一个select中使用它

有没有可能做这样的事情?

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)

一切都按预期工作.为什么?

mysql variables select procedure mysql-variables

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

Arel中的嵌套查询

我试图在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)中的子查询来完成上述操作?也许有一种完全不同的方式来完成这个不使用嵌套查询的查询?

ruby-on-rails arel

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

如何在计算列上使用WHERE?

我试图在两个表中为一些完整性编写一些查询.查询是这样的

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不是列.

mysql

9
推荐指数
1
解决办法
5251
查看次数

MySQL在计算列的别名上使用内部联接

我有这样的查询:

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只是一个简单的占位符,因为计算要复杂得多.

mysql sql alias group-by

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

sql/mysql过滤器仅包含最大值

我有一个像这样的结果集:

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)

希望能够清楚......

先感谢您


编辑:

我目前的查询是 …

mysql sql

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

使用2个其他别名的数学结果创建别名

我试图减去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 …

mysql select alias

5
推荐指数
1
解决办法
83
查看次数

MySQL Query从出生日期开始计算年龄

我的查询有问题,

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不存在我得到以下错误:

1054 - 'where子句'中的未知列'mAge'

看起来我的别名在where条件下无法正常工作.

如果我删除了mAge WHERE CLAUSE,我成功获得了mAge别名.

我需要你们

提前致谢 !

mysql

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