ホームページ > バックエンド開発 > PHPチュートリアル > MySQLは名前でグループ化されており、最大の値がわかりません。

MySQLは名前でグループ化されており、最大の値がわかりません。

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-27 13:18:07
オリジナル
1053 人が閲覧しました

select a.* from test a where 1 > (select count(*) from test where name = a.name and val > a.val )
SQL ステートメント、名前でグループ化し、最大の val 値を持つフィールドを表示
質問:select count(*) from test where name = a.name and val > a.val サブクエリは数値ではないでしょうか? SQL ステートメントは
select a.* from test a where 1 > 1 になるのではないでしょうか? しかし、このロジックは明らかに間違っています。では、正しいロジックは何でしょうか?外層と内層を比較するとどうなるでしょうか?それを理解するのにIQが足りない気がします、、、、、


ディスカッション(解決策)への返信

valの最大値を取得するとき、count(*)は0になりますね。 1>0 だけで十分ですか

val が最大値の場合
val > a.val が true ではない場合 (name = a.name および val > a.val のテストから count(*) を選択します) 0 を返します (条件を満たすレコードがありません)
1 > ( select count(*) from test where name = a.name and val > a.val )
が確立され、レコードが選択されます

実際には、すでにわかっていますが、曲がり角を曲がっていなかっただけです
select a.* from test a where 1 > count
count は、a.val より大きいすべてのレコードの数です。存在しません。 a.val が最大値である場合、式 1 > 0 が成立します

val > a.val が true ではない場合 (name = a.name および val > のテストから count(*) を選択します) a.val ) は 0 (一致するレコードなし) を返します

1 > (select count(*) from test where name = a.name and val > a.val )

が確立され、レコードが選択されます

実際には、あなたはすでにそれを知っていますが、角を曲がっていなかっただけです
select a.* from test a where 1 > ; count
count は、Conut が 0 に等しい場合のみです。 1 > 0 という式は存在しません

回答してくれた 2 人のモデレーターに感謝します。
ある程度は理解できましたが、まだ少し混乱しています。test a where 2 > 0 から a.* を選択すると、このデータがどのように取得されるのか知りたいのです。 ? select a.* from test a where 1>0 と直接書いているので、この条件ですべてのデータを取り出すことができます。


これは、テスト テーブル内のすべてのレコードを走査し、レコードをそれ自身と比較することを意味します。
php の 2 つの foreach に相当します

foreach($ar as $v)
foreach($ar as $vl)




は、テストテーブル内のすべてのレコードを走査し、それ自体と比較することを意味します。それを記録し、それ自体のすべての記録と比較します。

php の 2 つの foreach に相当します

foreach($ar as $v)
foreach($ar as $vl)

そう思ったのですが、ちょっと自信がありません(笑)、モデレータのお二人、ありがとうございました。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート