我有两张桌子:dilemme和like.第一个包含文章,第二个包含投票.脚本SELECT随机显示一篇文章,用户可以投票(喜欢和不喜欢).
我想创建一个查询,只显示超过5投票的文章,没有投票的文章等于0.
所以我尝试了这个:
SELECT d.ph1, d.ph2, d.id, SUM(l.vote) AS score
FROM dilemme d
LEFT JOIN like l
ON d.id = l.id_dilemma
WHERE d.valid = 'yup'
GROUP BY d.id HAVING SUM(l.vote) > 0
Run Code Online (Sandbox Code Playgroud)
它正确地向我显示了至少有一票并且投票总和大于0的行.这很好但是,如何选择没有投票的文章?我尝试了很多东西并做了一些研究,但无法解决我的问题.我认为INSERT INTO就像0投票一样,但我认为这不是一个好主意,因为它不是一个非常优化的解决方案.
提前致谢.PS:对不起我的英文,不是我的monthertongue;)
我在实现group_by和在Laravel中使用Eloquent进行查询时遇到了问题.
这是场景:
orders
- id
- qty
deliveries
- id
- qty
- order_id
Run Code Online (Sandbox Code Playgroud)
我想使用联接来显示具有不完整交货的订单以及相应的余额:
Order::left_join('deliveries', 'orders.id', '=', 'deliveries.order_id')
->select(array('orders.*'), DB::raw('orders.qty - IFNULL(sum(deliveries.qty),0) AS balance')))
->group_by('order_id')
->having('balance', '>', 0)
->get();
Run Code Online (Sandbox Code Playgroud)
没有'having'子句,'balance'值可以正常工作.但是,在添加'having'子句时,结果表不会显示任何行.有没有人有任何想法?
提前致谢!
我已经使用Django几年了但是我今天在HAVING为a 添加约束而苦苦挣扎GROUP BY.
我的查询集如下:
crm_models.Contact.objects\
.filter(dealercontact__dealer__pk__in=(265,),
dealercontact__activity='gardening',
date_data_collected__gte=datetime.date(2012,10,1),
date_data_collected__lt=datetime.date(2013,10,1))\
.annotate(nb_rels=Count('dealercontact'))
Run Code Online (Sandbox Code Playgroud)
这给了我以下MySQL查询:
SELECT *
FROM `contact`
LEFT OUTER JOIN `dealer_contact` ON (`contact`.`id_contact` = `dealer_contact`.`id_contact`)
WHERE (`dealer_contact`.`active` = True
AND `dealer_contact`.`activity` = 'gardening'
AND `contact`.`date_data_collected` >= '2012-10-01'
AND `contact`.`date_data_collected` < '2013-10-01'
AND `dealer_contact`.`id_dealer` IN (265))
GROUP BY `contact`.`id_contact`
ORDER BY NULL;
Run Code Online (Sandbox Code Playgroud)
我会得到这个HAVING约束我需要的东西:
HAVING SUM(IF(`dealer_contact`.`type`='customer', 1, 0)) = 0
Run Code Online (Sandbox Code Playgroud)
如何使用Django Queryset修复此问题?我在这个实例中需要一个查询集.
这里我只使用注释才能GROUP BY开启contact.id_contact.
编辑:我的目标是获得在dealercontact中没有"客户"关系但具有"ref"关系的联系人(当然根据WHERE子句).
class Contact(models.Model):
id_contact = models.AutoField(primary_key=True)
title = …Run Code Online (Sandbox Code Playgroud) 我有一张桌子如下
ID Username GroupID
1 venkat 2
2 venkat 3
3 ramu 1
4 ramu 2
Run Code Online (Sandbox Code Playgroud)
使用sql语句我想检索groupids 2,3中可用的所有用户名
在这种情况下,只有Venkat是groupid 2和3中可用的用户名
请帮助我
我试图一起使用CASE和GROUP BY,仅在它们符合CASE标准时才有条件地过滤结果,如果不匹配,则返回结果,就好像没有指定GROUP BY标准一样。
这是我所拥有的简单模型:
es.id | es.acct_num | p.id | p.name
1001 | 4306-0 | 1569 | The High School
1002 | 4306-0 | 1569 | The High School
665 | 5906-7 | 981 | Rec Center
783 | 5906-7 | 1221 | The Gym
Run Code Online (Sandbox Code Playgroud)
这是我想看到的:
es.id | es.acct_num | p.id | p.name
1001 | 4306-0 | 1569 | The High School
1002 | 4306-0 | 1569 | The High School
0 | 5906-7 | 0 | MULTI-SITE
Run Code Online (Sandbox Code Playgroud)
由于es.acct_num 5906-7 …
有没有办法纠正这个查询,以便它与ONLY_FULL_GROUP_BY启用一起工作?
SELECT LOWER(s) AS lower_s, SUM(i) AS sum_i
FROM t
GROUP BY 1
HAVING LENGTH(lower_s) < 5
Run Code Online (Sandbox Code Playgroud)
它给出了错误信息
HAVING 子句中使用了非分组字段“lower_s”
请参阅以下SQL语句:
SELECT datediff("d", MAX(invoice.date), Now) As Date_Diff
, MAX(invoice.date) AS max_invoice_date
, customer.number AS customer_number
FROM invoice
INNER JOIN customer
ON invoice.customer_number = customer.number
GROUP BY customer.number
Run Code Online (Sandbox Code Playgroud)
如果添加以下内容:
HAVING datediff("d", MAX(invoice.date), Now) > 365
Run Code Online (Sandbox Code Playgroud)
这会简单地排除Date_Diff <= 365的行吗?
这里的HAVING条款会有什么影响?
编辑:我没有体验到这里的答案.mdb的副本位于http://hotfile.com/dl/40641614/2353dfc/test.mdb.html(无宏或病毒).VISDATA.EXE用于执行查询.
EDIT2:我认为问题可能是VISDATA,因为我通过DAO遇到了不同的结果.
我试图找出如何查询表(该表实际上是一个结果集,因此它将是一个子查询),将其分组ColA=ColB(见下文),并一步创建一个计算字段.
所以,如果我的测试数据看起来像
ColA ColB ColC
1 1 aaa 1 2 bbbb 1 3 cccc 2 2 dddd 3 3 eeee 3 4 ffff 3 5 gggg 3 6 hhhh 4 4 iiii 5 5 jjjj 6 6 kkkk 6 7 llll 6 8 mmmm
我想只检索行,ColA=ColB并添加一个新列,告诉我原始数据是否ColA重复.见下文.
ColA ColB ColC multiples
1 1 aaaa yes 2 2 dddd no 3 3 eeee yes 4 4 iiii no 5 5 jjjj no 6 6 kkkk yes
有人可以帮我解决语法问题吗?我一直在玩Group …
我想用类似下面的检索中的所有行的查询events有至少一个相应event_attendances的行'male'和'female'.下面的查询不返回行(其中当然有一些events是具有event_attendances从男女).
有没有一种方法可以在没有子查询的情况下执行此操作(由于在我的应用程序中生成SQL的方式,子查询对我来说实现起来要困难得多)?
SELECT * FROM events e
LEFT JOIN event_attendances ea ON (e.id = ea.event_id)
GROUP BY e.id
HAVING ea.gender = 'female' AND ea.gender = 'male'
Run Code Online (Sandbox Code Playgroud) 我正在使用Microsoft SQL SERVER 2014.
以下是我的查询
SELECT type, SUM(calories) AS total_calories
FROM exercise_logs
GROUP BY type
HAVING total_calories > 150;
Run Code Online (Sandbox Code Playgroud)
我得到了错误
消息207,级别16,状态1,行2无效的列名称'total_calories'.
这是一个非常简单的表(我是sql和学习它的新手).谁能指出我做错了什么?谢谢.