鉴于这些表格:
TABLE Stores (
store_id INT,
store_name VARCHAR,
etc
);
TABLE Employees (
employee_id INT,
store_id INT,
employee_name VARCHAR,
currently_employed BOOLEAN,
etc
);
Run Code Online (Sandbox Code Playgroud)
我想为每家商店列出15名雇员最长的员工(假设15 employee_id名员工最低),或者如果有15名员工,则列出所有员工currently_employed='t'.我想用join子句来做.
我发现很多人这样做的例子只有 1行,通常是最小或最大(单个最长雇用的员工),但我想基本上结合一个ORDER BY和一个LIMIT内部的联接.其中一些例子可以在这里找到:
我也找到了很好的例子来做这个商店(我没有,我有大约5000家商店):
我也看到你可以使用TOP而不是ORDER BY和LIMIT,而不是PostgreSQL.
我认为这两个表之间的连接子句不是唯一(或者甚至是最好的方法),如果它可以只store_id在employees表的内部工作,那么我会对其他方法持开放态度.之后可以随时加入.
由于我对SQL很陌生,我想要任何理论背景或其他解释可以帮助我理解工作原理.
我想限制相关记录来自
$categories = Category::with('exams')->get();
Run Code Online (Sandbox Code Playgroud)
这将使我获得所有类别的考试,但我想要的是从一个类别和每个类别获得 5 个考试。
类别模型
public function Exams() {
return $this->hasMany('Exam');
}
Run Code Online (Sandbox Code Playgroud)
考试模式
public function category () {
return $this->belongsTo('Category');
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几件事,但无法让它工作
首先我发现的是这样的
$categories = Category::with(['exams' => function($exams){
$exams->limit(5);
}])->get();
Run Code Online (Sandbox Code Playgroud)
但问题是它只会让我从所有类别中获得 5 条记录。我也尝试为类别模型添加限制
public function Exams() {
return $this->hasMany('Exam')->limit(5);
}
Run Code Online (Sandbox Code Playgroud)
但这并没有做任何事情,并且返回艰难,它没有限制 5。
那么有没有一种方法可以用 Eloquent 来做到这一点,或者我应该简单地加载所有东西(想传递它)并使用 foreach 的 break 吗?
我正在使用DESCRIBE关键字来获取有关临时视图的列信息。这是一个有用的方法,但是我有一个表,我只想描述其中的一部分列。我试图LIMIT结合使用DESCRIBE来实现这一点,但无法弄清楚。
这是一个玩具数据集(使用 pyspark 创建):
# make some test data
columns = ['id', 'dogs', 'cats', 'horses', 'people']
vals = [
(1, 2, 0, 4, 3),
(2, 0, 1, 2, 4)
]
# create DataFrame
df = spark.createDataFrame(vals, columns)
df.createOrReplaceTempView('df')
Run Code Online (Sandbox Code Playgroud)
现在用sql来描述:
%%sql
DESCRIBE df
Run Code Online (Sandbox Code Playgroud)
输出:
col_name data_type
id bigint
dogs bigint
cats bigint
horses bigint
people bigint
Run Code Online (Sandbox Code Playgroud)
实际上,我有比这更多的列,我想做的是LIMIT这个查询的输出。以下是我尝试过的一些事情:
尝试#1:
DESCRIBE df
LIMIT 3
Run Code Online (Sandbox Code Playgroud)
错误:
An error was encountered:
"\nextraneous input '3' expecting {<EOF>, '.'}(line …Run Code Online (Sandbox Code Playgroud) 我有两个变量$take(limit)和$skip(offset),它们是mysql中limit子句的值。
现在,代码点火器向后执行它的limit子句。
例如
$this->db->limit(5,10)将LIMIT 10, 5在MYSQL中生成。
无论如何,我很难理解如何limit根据设置的两个值中的哪一个来调用函数。
基本上,
如果都设置了,我想打电话
$this->db->limit($take, $skip)
如果只$take设置了我想打电话
$this->db->limit($take)
但是,如果只有$skip is set, e.g. if$ skip = 10`,那我想显示什么,除了前10个,我想显示所有行。
我打电话吗
$this->db->limit(null, $skip)或
$this->db->limit(0, $skip)或
$this->db->limit(false, $skip)或
完全不同的东西?
如何在以下查询中将结果限制为10?我使用SQLSRV.
SELECT Id, Firstname, Surname FROM Person WHERE Firstname LIKE ?
Run Code Online (Sandbox Code Playgroud) 我的Android应用程序有一个从SQLite数据库中显示数据的活动.db表可能包含大量行.出于性能原因,我想一次从db加载20行,当用户向下滚动listview到最后时,读取接下来的20行.
所以我想使用这样的SQL语句:
select * from mytable where id > N and count = 20;
Run Code Online (Sandbox Code Playgroud)
我只是想知道SQLite是否支持这种"count=20"特性来读取最多20行的查询.如果支持,那么确切的语法是什么?
我有这个代码,它计算列中的所有行correct并igonringLIMIT 5
被忽略的代码行
$last5rate = $db->prepare("select sum(correct)
from exams where username = :username ORDER BY testID DESC LIMIT 5");
Run Code Online (Sandbox Code Playgroud)
这是整个代码
<?php
require('includes/config.php');
//if not logged in redirect to login page
if(!$user->is_logged_in()){ header('Location: login.php'); }
$username = $_SESSION['username'];
$last5rate = $db->prepare("select sum(correct) from exams where username = :username ORDER BY testID DESC LIMIT 5");
$last5rate->execute(array(':username' => $username));
for($i=0; $rows = $last5rate->fetch(); $i++){
//Edit this row
$last5 = $rows['sum(correct)'];
$last5final = $last5 / 10;
}
echo $last5final;
?>
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法 …
在我的表中,我有按timestamp. 我想返回一个具有最高timestamp.
这有效:
SELECT max(`timestamp`) FROM `messages`
Run Code Online (Sandbox Code Playgroud)
但是,它只返回timestamp值。所以我也尝试选择该message值:
SELECT max(`timestamp`), `message` FROM `messages`
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column 'database.messages.message'; this is incompatible with sql_mode=only_full_group_by
Run Code Online (Sandbox Code Playgroud)
所以我添加了一个 GROUP BY:
SELECT max(`timestamp`), `message` FROM `messages`
GROUP BY `message`
Run Code Online (Sandbox Code Playgroud)
然而,这最终会返回表中的每个值。
我知道 GROUP BY 应该统一相同的条目,我完全不知道为什么在这种情况下我被迫使用它以及如何获取最新的条目而不是所有条目。
我想知道是否有一个简单的方法,只有一个sql语句返回表中的最后三个结果,但按顺序,即如果有一个有问题的结果,它将以98,99,100的顺序返回,而不是简单地按顺序排序id DESC和限制3将按顺序返回100,99,98
任何帮助非常感谢.
ps在这个例子中,让我说我不知道结果的数量,并不是真的想发送2个sql请求只是为了找到金额(对于任何OFFSET答案).
我有一个像这样的表:
create table myTab(
id integer primary key,
is_available boolean not null default true
);
Run Code Online (Sandbox Code Playgroud)
我需要执行一个查询,仅返回第一个遇到的设置is_available为 false 的行。
我试图通过使用从表中只选择10行,limit但它给了我一个错误,
我的疑问是
SELECT *
FROM table_name
ORDER BY CUSTOMER
LIMIT 10
Run Code Online (Sandbox Code Playgroud)
它给出了一个错误:
ORA-00933:SQL命令未正确结束
任何人都可以指导我.
sql-limit ×11
sql ×6
mysql ×3
php ×2
postgresql ×2
sql-order-by ×2
android ×1
codeigniter ×1
eloquent ×1
group-by ×1
join ×1
jsp ×1
laravel ×1
laravel-4 ×1
one-to-many ×1
oracle ×1
oracle10g ×1
pdo ×1
pyspark ×1
sql-server ×1
sqlite ×1