4

ここで初歩的な質問!

私はこのクエリを書きましたが、「group by」は非常にばかげています...どうすればこれを修正できますか?

SELECT
    COUNT(*) AS total,
    'x' as test
    FROM
contents
    WHERE name LIKE 'C%'
GROUP BY
    test
ORDER BY id ASC

パフォーマンスに関するさまざまなソリューションと情報を歓迎します (おそらく DISTINCT を使用しますか?)

前もって感謝します!

4

3 に答える 3

15

これは、他のオプションと同様に機能するはずです-

SELECT
    LEFT(name, 1) AS first_letter,
    COUNT(*) AS total
FROM contents
GROUP BY first_letter

このクエリを一度に 1 文字ずつ実行する場合は、WHERE 句を追加して GROUP BY - を削除できます。

SELECT COUNT(*) AS total
FROM contents
WHERE name LIKE 'a%'
于 2012-04-14T01:33:00.743 に答える
1

クエリを分析しましょう。

SELECT
    COUNT(*) AS total,
    'x' as test     <-- Why?
    FROM            <-- Bad formatting.
contents
    WHERE name LIKE 'C%'
GROUP BY
    test            <-- Removing 'x' and the whole GROUP BY has the same effect.
ORDER BY id ASC     <-- The result only contains one row - nothing to sort.

nameしたがって、 「C」で始まる行の数を含む、1 つのフィールドを持つ 1 つの行を返すクエリは次のようになります。

SELECT COUNT(*)
FROM contents
WHERE name LIKE 'C%'

リーディング エッジがであるインデックスをname使用すると、良好なパフォーマンスが保証されます。その理由を理解するには、SQL インデックスの構造をご覧ください。

于 2012-04-14T01:42:58.230 に答える
0

必要な場合に備えてすべてを提供する必要があります

SELECT
  COUNT(*) AS total,
  test
FROM
 (SELECT substring(name,1,1) as test
 from contents) t
GROUP BY test
于 2012-04-14T01:33:07.823 に答える